X-Git-Url: https://git.ladys.computer/Gitweb/blobdiff_plain/c0530d1d0ce339e5aec27c6e72198ec3b6fcad45377f2736b800c84f8792858e..d45eeb6e969fd29d8a01cb7288b29229224c82e25b91247db60481a2b755d0b3:/gitweb.perl
diff --git a/gitweb.perl b/gitweb.perl
index 0146151..6d6f63d 100755
--- a/gitweb.perl
+++ b/gitweb.perl
@@ -1470,6 +1470,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;
@@ -2400,8 +2410,14 @@ sub parse_tag {
$tag{'name'} = $1;
} elsif ($line =~ m/^tagger (.*) ([0-9]+) (.*)$/) {
$tag{'author'} = $1;
- $tag{'epoch'} = $2;
- $tag{'tz'} = $3;
+ $tag{'author_epoch'} = $2;
+ $tag{'author_tz'} = $3;
+ if ($tag{'author'} =~ m/^([^<]+) <([^>]*)>/) {
+ $tag{'author_name'} = $1;
+ $tag{'author_email'} = $2;
+ } else {
+ $tag{'author_name'} = $tag{'author'};
+ }
} elsif ($line =~ m/--BEGIN/) {
push @comment, $line;
last;
@@ -3215,21 +3231,50 @@ sub git_print_header_div {
"\n\n";
}
+sub print_local_time {
+ my %date = @_;
+ if ($date{'hour_local'} < 6) {
+ printf(" (%02d:%02d %s)",
+ $date{'hour_local'}, $date{'minute_local'}, $date{'tz_local'});
+ } else {
+ printf(" (%02d:%02d %s)",
+ $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 "
" .
+ print "<$tag class=\"author_date\">" .
esc_html($co->{'author_name'}) .
" [$ad{'rfc2822'}";
- if ($ad{'hour_local'} < 6) {
- printf(" (%02d:%02d %s)",
- $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'});
- } else {
- printf(" (%02d:%02d %s)",
- $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'});
+ 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 {
@@ -4143,11 +4188,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" .
@@ -4194,11 +4237,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);
@@ -4351,9 +4392,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"},
@@ -4587,11 +4627,7 @@ sub git_tag {
$tag{'type'}) . " | \n" .
"
\n";
if (defined($tag{'author'})) {
- my %ad = parse_date($tag{'epoch'}, $tag{'tz'});
- print "| author | " . esc_html($tag{'author'}) . " |
\n";
- print " | " . $ad{'rfc2822'} .
- sprintf(" (%02d:%02d %s)", $ad{'hour_local'}, $ad{'minute_local'}, $ad{'tz_local'}) .
- " |
\n";
+ git_print_authorship_rows(\%tag, 'author');
}
print "\n\n" .
"\n";
@@ -5095,9 +5131,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);
@@ -5116,8 +5152,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
@@ -5184,22 +5218,7 @@ sub git_commit {
}
print "
\n" .
"