[PATCH] Allow using --cc when showing a merge.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
* This does not do the colorized diff, but just to show ideas
where to put the link to ask for the combined diff.
gitweb.cgi | 60 +++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 47 insertions(+), 13 deletions(-)
1f19febaefbf90dc04a6b37d79ba3a9337decaff
diff --git a/gitweb.cgi b/gitweb.cgi
index c1bb624..d2659ea 100755
--- a/gitweb.cgi
+++ b/gitweb.cgi
@@ -191,6 +191,9 @@ if (!defined $action || $action eq "summ
} elsif ($action eq "commitdiff_plain") {
git_commitdiff_plain();
exit;
+} elsif ($action eq "combinediff") {
+ git_combinediff();
+ exit;
} elsif ($action eq "history") {
git_history();
exit;
@@ -1762,7 +1765,15 @@ sub git_commit {
"</tr>\n";
print "<tr><td>committer</td><td>" . esc_html($co{'committer'}) . "</td></tr>\n";
print "<tr><td></td><td> $cd{'rfc2822'}" . sprintf(" (%02d:%02d %s)", $cd{'hour_local'}, $cd{'minute_local'}, $cd{'tz_local'}) . "</td></tr>\n";
- print "<tr><td>commit</td><td style=\"font-family:monospace\">$co{'id'}</td></tr>\n";
+ print "<tr><td>commit</td><td style=\"font-family:monospace\">$co{'id'}</td>";
+ if (1 < @{$co{'parents'}}) {
+ print '<td class="link">';
+ print $cgi->a({-href => "$my_uri?" .
+ esc_param("p=$project;a=combinediff;".
+ "h=$hash")}, "combinediff");
+ print '</td>';
+ }
+ print "</tr>\n";
print "<tr>" .
"<td>tree</td>" .
"<td style=\"font-family:monospace\">" .
@@ -2044,6 +2055,38 @@ sub git_commitdiff {
git_footer_html();
}
+sub git_combinediff {
+ mkdir($git_temp, 0700);
+ my $fd;
+ my $refs = read_info_ref("tags");
+ open $fd, "-|", "$gitbin/git-describe $hash";
+ my ($tagname) = <$fd>;
+ chomp($tagname);
+ close $fd;
+ print $cgi->header(-type => "text/plain", -charset => 'utf-8', '-content-disposition' => "inline; filename=\"git-$hash.patch\"");
+ my %co = git_read_commit($hash);
+ my %ad = date_str($co{'author_epoch'}, $co{'author_tz'});
+ my $comment = $co{'comment'};
+ print "From: $co{'author'}\n" .
+ "Date: $ad{'rfc2822'} ($ad{'tz_local'})\n".
+ "Subject: $co{'title'}\n";
+ if (defined $tagname) {
+ print "X-Git-Tag: $tagname\n";
+ }
+ print "\n";
+
+ foreach my $line (@$comment) {;
+ print "$line\n";
+ }
+ print "---\n\n";
+
+ open $fd, "-|", "$gitbin/git-diff-tree --cc $hash";
+ while (<$fd>) {
+ print $_;
+ }
+ close $fd;
+}
+
sub git_commitdiff_plain {
mkdir($git_temp, 0700);
open my $fd, "-|", "$gitbin/git-diff-tree -r $hash_parent $hash" or die_error(undef, "Open failed.");
@@ -2051,20 +2094,11 @@ sub git_commitdiff_plain {
close $fd or die_error(undef, "Reading diff-tree failed.");
# try to figure out the next tag after this commit
- my $tagname;
my $refs = read_info_ref("tags");
- open $fd, "-|", "$gitbin/git-rev-list HEAD";
- chomp (my (@commits) = <$fd>);
+ open $fd, "-|", "$gitbin/git-describe $hash";
+ my ($tagname) = <$fd>;
+ chomp($tagname);
close $fd;
- foreach my $commit (@commits) {
- if (defined $refs->{$commit}) {
- $tagname = $refs->{$commit}
- }
- if ($commit eq $hash) {
- last;
- }
- }
-
print $cgi->header(-type => "text/plain", -charset => 'utf-8', '-content-disposition' => "inline; filename=\"git-$hash.patch\"");
my %co = git_read_commit($hash);
my %ad = date_str($co{'author_epoch'}, $co{'author_tz'});
--
1.1.6.gbb042