diff --git a/gitweb/gitweb.css b/gitweb/gitweb.css
index a01eac814e..68b22ffece 100644
--- a/gitweb/gitweb.css
+++ b/gitweb/gitweb.css
@@ -132,11 +132,14 @@ div.list_head {
font-style: italic;
}
+.author_date, .author {
+ font-style: italic;
+}
+
div.author_date {
padding: 8px;
border: solid #d9d8d1;
border-width: 0px 0px 1px 0px;
- font-style: italic;
}
a.list {
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1e7e2d8387..7fd53f68de 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1469,6 +1469,16 @@ sub format_subject_html {
}
}
+# format the author name of the given commit with the given tag
+# the author name is chopped and escaped according to the other
+# optional parameters (see chop_str).
+sub format_author_html {
+ my $tag = shift;
+ my $co = shift;
+ my $author = chop_and_escape_str($co->{'author_name'}, @_);
+ return "<$tag class=\"author\">" . $author . "$tag>";
+}
+
# format git diff header line, i.e. "diff --(git|combined|cc) ..."
sub format_git_diff_header_line {
my $line = shift;
@@ -3214,21 +3224,50 @@ sub git_print_header_div {
"\n\n";
}
-sub git_print_authorship {
- my $co = shift;
-
- my %ad = parse_date($co->{'author_epoch'}, $co->{'author_tz'});
- print "
" .
- esc_html($co->{'author_name'}) .
- " [$ad{'rfc2822'}";
- if ($ad{'hour_local'} < 6) {
+sub print_local_time {
+ my %date = @_;
+ if ($date{'hour_local'} < 6) {
printf(" (%02d:%02d %s)",
- $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'});
+ $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'});
} else {
printf(" (%02d:%02d %s)",
- $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'});
+ $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'});
+ }
+}
+
+# Outputs the author name and date in long form
+sub git_print_authorship {
+ my $co = shift;
+ my %opts = @_;
+ my $tag = $opts{-tag} || 'div';
+
+ my %ad = parse_date($co->{'author_epoch'}, $co->{'author_tz'});
+ print "<$tag class=\"author_date\">" .
+ esc_html($co->{'author_name'}) .
+ " [$ad{'rfc2822'}";
+ print_local_time(%ad) if ($opts{-localtime});
+ print "]$tag>\n";
+}
+
+# Outputs table rows containing the full author or committer information,
+# in the format expected for 'commit' view (& similia).
+# Parameters are a commit hash reference, followed by the list of people
+# to output information for. If the list is empty it defalts to both
+# author and committer.
+sub git_print_authorship_rows {
+ my $co = shift;
+ # too bad we can't use @people = @_ || ('author', 'committer')
+ my @people = @_;
+ @people = ('author', 'committer') unless @people;
+ foreach my $who (@people) {
+ my %wd = parse_date($co->{"${who}_epoch"}, $co->{"${who}_tz"});
+ print "
| $who | " . esc_html($co->{$who}) . " |
\n".
+ "" .
+ " | $wd{'rfc2822'}";
+ print_local_time(%wd);
+ print " | " .
+ "
\n";
}
- print "]\n";
}
sub git_print_page_path {
@@ -4142,11 +4181,9 @@ sub git_shortlog_body {
print "\n";
}
$alternate ^= 1;
- my $author = chop_and_escape_str($co{'author_name'}, 10);
# git_summary() used print "| $co{'age_string'} | \n" .
print "$co{'age_string_date'} | \n" .
- "" . $author . " | \n" .
- "";
+ format_author_html('td', \%co, 10) . " | ";
print format_subject_html($co{'title'}, $co{'title_short'},
href(action=>"commit", hash=>$commit), $ref);
print " | \n" .
@@ -4193,11 +4230,9 @@ sub git_history_body {
print "
\n";
}
$alternate ^= 1;
- # shortlog uses chop_str($co{'author_name'}, 10)
- my $author = chop_and_escape_str($co{'author_name'}, 15, 3);
print "| $co{'age_string_date'} | \n" .
- "" . $author . " | \n" .
- "";
+ # shortlog: format_author_html('td', \%co, 10)
+ format_author_html('td', \%co, 15, 3) . " | ";
# originally git_history used chop_str($co{'title'}, 50)
print format_subject_html($co{'title'}, $co{'title_short'},
href(action=>"commit", hash=>$commit), $ref);
@@ -4350,9 +4385,8 @@ sub git_search_grep_body {
print " |
\n";
}
$alternate ^= 1;
- my $author = chop_and_escape_str($co{'author_name'}, 15, 5);
print "| $co{'age_string_date'} | \n" .
- "" . $author . " | \n" .
+ format_author_html('td', \%co, 15, 5) .
"" .
$cgi->a({-href => href(action=>"commit", hash=>$co{'id'}),
-class => "list subject"},
@@ -5094,9 +5128,9 @@ sub git_log {
" | " .
$cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree") .
" \n" .
- "\n" .
- "" . esc_html($co{'author_name'}) . " [$ad{'rfc2822'}] \n" .
"\n";
+ git_print_authorship(\%co, -tag => 'span');
+ print " \n\n";
print "\n";
git_print_log($co{'comment'}, -final_empty_line=> 1);
@@ -5115,8 +5149,6 @@ sub git_commit {
$hash ||= $hash_base || "HEAD";
my %co = parse_commit($hash)
or die_error(404, "Unknown commit object");
- my %ad = parse_date($co{'author_epoch'}, $co{'author_tz'});
- my %cd = parse_date($co{'committer_epoch'}, $co{'committer_tz'});
my $parent = $co{'parent'};
my $parents = $co{'parents'}; # listref
@@ -5183,22 +5215,7 @@ sub git_commit {
}
print " \n" .
" |