Skip to content

Commit

Permalink
gitweb: use for-each-ref to show the latest activity across branches
Browse files Browse the repository at this point in the history
The project list page shows last change from the HEAD branch but
often people would want to view activity on any branch.

Unfortunately that is fairly expensive without the core-side
support.  for-each-ref was invented exactly for that.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Oct 15, 2006
1 parent b2d3476 commit 63e02a1
Showing 1 changed file with 24 additions and 11 deletions.
35 changes: 24 additions & 11 deletions gitweb/gitweb.perl
Original file line number Diff line number Diff line change
Expand Up @@ -1009,6 +1009,24 @@ sub parse_tag {
return %tag
}

sub git_get_last_activity {
my ($path) = @_;
my $fd;

$git_dir = "$projectroot/$path";
open($fd, "-|", git_cmd(), 'for-each-ref',
'--format=%(refname) %(committer)',
'--sort=-committerdate',
'refs/heads') or return;
my $most_recent = <$fd>;
close $fd or return;
if ($most_recent =~ / (\d+) [-+][01]\d\d\d$/) {
my $timestamp = $1;
my $age = time - $timestamp;
return ($age, age_string($age));
}
}

sub parse_commit {
my $commit_id = shift;
my $commit_text = shift;
Expand Down Expand Up @@ -2258,16 +2276,11 @@ sub git_project_list {
die_error(undef, "No projects found");
}
foreach my $pr (@list) {
my $head = git_get_head_hash($pr->{'path'});
if (!defined $head) {
next;
}
$git_dir = "$projectroot/$pr->{'path'}";
my %co = parse_commit($head);
if (!%co) {
my (@aa) = git_get_last_activity($pr->{'path'});
unless (@aa) {
next;
}
$pr->{'commit'} = \%co;
($pr->{'age'}, $pr->{'age_string'}) = @aa;
if (!defined $pr->{'descr'}) {
my $descr = git_get_project_description($pr->{'path'}) || "";
$pr->{'descr'} = chop_str($descr, 25, 5);
Expand Down Expand Up @@ -2317,7 +2330,7 @@ sub git_project_list {
"</th>\n";
}
if ($order eq "age") {
@projects = sort {$a->{'commit'}{'age'} <=> $b->{'commit'}{'age'}} @projects;
@projects = sort {$a->{'age'} <=> $b->{'age'}} @projects;
print "<th>Last Change</th>\n";
} else {
print "<th>" .
Expand All @@ -2339,8 +2352,8 @@ sub git_project_list {
-class => "list"}, esc_html($pr->{'path'})) . "</td>\n" .
"<td>" . esc_html($pr->{'descr'}) . "</td>\n" .
"<td><i>" . chop_str($pr->{'owner'}, 15) . "</i></td>\n";
print "<td class=\"". age_class($pr->{'commit'}{'age'}) . "\">" .
$pr->{'commit'}{'age_string'} . "</td>\n" .
print "<td class=\"". age_class($pr->{'age'}) . "\">" .
$pr->{'age_string'} . "</td>\n" .
"<td class=\"link\">" .
$cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary")}, "summary") . " | " .
$cgi->a({-href => href(project=>$pr->{'path'}, action=>"shortlog")}, "shortlog") . " | " .
Expand Down

0 comments on commit 63e02a1

Please sign in to comment.