gitweb: remotes view for a single remote
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Thu, 11 Nov 2010 12:26:14 +0000 (13:26 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Nov 2010 21:02:19 +0000 (13:02 -0800)
When 'remotes' view is passed the 'hash' parameter, interpret it as the
name of a remote and limit the view the the heads of that remote.

In single-remote view we let the user switch easily to the default
remotes view by specifying an -action_extra for the page header and by
enabling the 'remotes' link in the reference navigation submenu.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
gitweb/gitweb.perl

index c3b89666c5a4fe89665ba48379ac6c363c26c11c..bf387572bf7f94773809f1b12f24f07cf84e0bbd 100755 (executable)
@@ -5558,14 +5558,36 @@ sub git_remotes {
                or die_error(403, "Remote heads view is disabled");
 
        my $head = git_get_head_hash($project);
-       git_header_html();
-       git_print_page_nav('','', $head,undef,$head,format_ref_views('remotes'));
-       git_print_header_div('summary', $project);
+       my $remote = $input_params{'hash'};
+
+       my @remotelist;
+
+       if (defined $remote) {
+               # only display the heads in a given remote, stripping the
+               # remote name which is already visible elsewhere
+               @remotelist = map {
+                       my $ref = $_ ;
+                       $ref->{'name'} =~ s!^$remote/!!;
+                       $ref
+               } git_get_heads_list(undef, "remotes/$remote");
+       } else {
+               @remotelist = git_get_heads_list(undef, 'remotes');
+       }
+
+       git_header_html(undef, undef, -action_extra => $remote);
+       git_print_page_nav('', '',  $head, undef, $head,
+               format_ref_views($remote ? '' : 'remotes'));
+
+       if (defined $remote) {
+               git_print_header_div('remotes', "$remote remote for $project");
+       } else {
+               git_print_header_div('summary', "$project remotes");
+       }
 
-       my @remotelist = git_get_heads_list(undef, 'remotes');
        if (@remotelist) {
                git_heads_body(\@remotelist, $head);
        }
+
        git_footer_html();
 }