[PATCH] gitweb: Create special from-file/to-file header for combined diff
- From
Jakub Narebski <jnareb@gmail.com>
- Date
- May 27, 2007, 23:16 UTC
- Message-ID
- <11803077803470-git-send-email-jnareb@gmail.com>
- In-Reply-To
- <11803077792064-git-send-email-jnareb@gmail.com>
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@gmail.com> --- 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