Instead of using default, diff(1) like from-file/to-file header for combined diff (for a merge commit), which looks like: --- a/git-gui/git-gui.sh +++ b/_git-gui/git-gui.sh_ (where _link_ denotes [hidden] hyperlink), create from-file(n)/to-file header, using n/file for each or parents, e.g.: --- 1/_git-gui/git-gui.sh_ --- 2/_git-gui.sh_ +++ b/_git-gui/git-gui.sh_ Test it on one of merge commits involving rename, e.g. 95f97567c1887d77f3a46b42d8622c76414d964d (rename at top) 5bac4a671907604b5fb4e24ff682d5b0e8431931 (file from one branch) Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- This is just an idea, not seriously meant to be applied... unless of course you think that this is great. What do you think about it? This patch depends on my earlier patch "gitweb: Split git_patchset_body into separate subroutines" gitweb/gitweb.perl | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 795af92..f73f184 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1045,17 +1045,33 @@ sub format_diff_from_to_header { #assert($line =~ m/^---/) if DEBUG; # no extra formatting "^--- /dev/null" if ($line =~ m!^--- "?a/!) { - if (!$diffinfo->{'nparents'} && # multiple 'from' - $from->{'href'}) { - $line = '--- a/' . - $cgi->a({-href=>$from->{'href'}, -class=>"path"}, - esc_path($from->{'file'})); + if (!$diffinfo->{'nparents'}) { + if ($from->{'href'}) { + $line = '--- a/' . + $cgi->a({-href=>$from->{'href'}, -class=>"path"}, + esc_path($from->{'file'})); + } else { + $line = '--- a/' . + esc_path($from->{'file'}); + } + $result .= qq!<div class="diff from_file">$line</div>\n!; } else { - $line = '--- a/' . - esc_path($from->{'file'}); + for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) { + if ($from->{'href'}[$i]) { + $result .= qq!<div class="diff from_file">--- ! . + ($i+1) . "/" . + $cgi->a({-href=>$from->{'href'}[$i], -class=>"path"}, + esc_path($from->{'file'}[$i])) . + qq!</div>\n!; + } else { + $result .= qq!<div class="diff from_file">--- /dev/null</div>\n!; + } + } } + } else { + $result .= qq!<div class="diff from_file">$line</div>\n!; } - $result .= qq!<div class="diff from_file">$line</div>\n!; + $line = $to_line; #assert($line =~ m/^\+\+\+/) if DEBUG; -- 1.5.2 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html