OSDN Git Service

gitweb: Create special from-file/to-file header for combined diff
authorJakub Narebski <jnareb@gmail.com>
Fri, 8 Jun 2007 11:29:49 +0000 (13:29 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 10 Jun 2007 23:57:48 +0000 (16:57 -0700)
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>/_<filename>_" for each of 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)

This is mainly meant to easier see renames in a merge commit.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
gitweb/gitweb.perl

index aee4f23..13114bc 100755 (executable)
@@ -1064,19 +1064,35 @@ sub format_diff_from_to_header {
 
        $line = $from_line;
        #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'}));
-               } else {
-                       $line = '--- a/' .
-                               esc_path($from->{'file'});
+       # no extra formatting for "^--- /dev/null"
+       if (! $diffinfo->{'nparents'}) {
+               # ordinary (single parent) diff
+               if ($line =~ m!^--- "?a/!) {
+                       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 {
+               # combined diff (merge commit)
+               for (my $i = 0; $i < $diffinfo->{'nparents'}; $i++) {
+                       if ($from->{'href'}[$i]) {
+                               $line = '--- ' .
+                                       ($i+1) . "/" .
+                                       $cgi->a({-href=>$from->{'href'}[$i], -class=>"path"},
+                                               esc_path($from->{'file'}[$i]));
+                       } else {
+                               $line = '--- /dev/null';
+                       }
+                       $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;