[PATCH 7/7] gitweb: group remote heads
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
---
gitweb/gitweb.perl | 35 ++++++++++++++++++++++++++++-------
1 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 92551e4..66b5400 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -2758,6 +2758,16 @@ sub git_get_last_activity {
return (undef, undef);
}
+sub git_get_remotes {
+ my ($limit) = @_;
+ open my $fd, '-|' , git_cmd(), 'remote';
+ return () unless $fd;
+ my @remotes = map { chomp ; $_ } <$fd>;
+ close $fd or return ();
+ my @remoteheads = git_get_heads_list($limit, 'remotes');
+ return (\@remotes, \@remoteheads);
+}
+
sub git_get_references {
my $type = shift || "";
my %refs;
@@ -4979,7 +4989,7 @@ sub git_heads_body {
"<td class=\"link\">" .
$cgi->a({-href => href(action=>"shortlog", hash=>$ref{'fullname'})}, "shortlog") . " | " .
$cgi->a({-href => href(action=>"log", hash=>$ref{'fullname'})}, "log") . " | " .
- $cgi->a({-href => href(action=>"tree", hash=>$ref{'fullname'}, hash_base=>$ref{'name'})}, "tree") .
+ $cgi->a({-href => href(action=>"tree", hash=>$ref{'fullname'}, hash_base=>$ref{'fullname'})}, "tree") .
"</td>\n" .
"</tr>";
}
@@ -4991,6 +5001,19 @@ sub git_heads_body {
print "</table>\n";
}
+sub git_remotes_body {
+ my ($remotedata, $head) = @_;
+ my @remotenames = @{$remotedata->[0]};
+ my @allheads = @{$remotedata->[1]};
+ foreach my $remote (@remotenames) {
+ my @remoteheads = grep { $_->{'name'} =~ s!^\Q$remote\E/!! } @allheads;
+ git_begin_group("remotes", $remote, "remotes/$remote",$remote);
+ git_heads_body(\@remoteheads, $head);
+ git_end_group();
+ }
+
+}
+
sub git_search_grep_body {
my ($commitlist, $from, $to, $extra) = @_;
$from = 0 unless defined $from;
@@ -5137,7 +5160,7 @@ sub git_summary {
# there are more ...
my @taglist = git_get_tags_list(16);
my @headlist = git_get_heads_list(16, 'heads');
- my @remotelist = $remote_heads ? git_get_heads_list(16, 'remotes') : ();
+ my @remotelist = $remote_heads ? git_get_remotes(16) : ();
my @forklist;
my $check_forks = gitweb_check_feature('forks');
@@ -5217,9 +5240,7 @@ sub git_summary {
if (@remotelist) {
git_print_header_div('remotes');
- git_heads_body(\@remotelist, $head, 0, 15,
- $#remotelist <= 15 ? undef :
- $cgi->a({-href => href(action=>"remotes")}, "..."));
+ git_remotes_body(\@remotelist, $head);
}
if (@forklist) {
@@ -5551,9 +5572,9 @@ sub git_remotes {
git_print_page_nav('','', $head,undef,$head, $heads_nav);
git_print_header_div('summary', $project);
- my @remotelist = git_get_heads_list(undef, 'remotes');
+ my @remotelist = git_get_remotes();
if (@remotelist) {
- git_heads_body(\@remotelist, $head);
+ git_remotes_body(\@remotelist, $head);
}
git_footer_html();
}
--
1.7.3.rc1.230.g8b572