]> Lady’s Gitweb - Gitweb/blobdiff - gitweb.perl
gitweb: Use "previous" header of git-blame -p in 'blame' view
[Gitweb] / gitweb.perl
index e0da96000b8d999339f677b3256b652a4a9644455c4cafa79ec492faaa31446d..13910bc9fa4668106f5e43882f0b1d9537f883f627edebbf6fee21fa974f571a 100755 (executable)
@@ -4828,7 +4828,7 @@ HTML
                        chomp $data;
                        last if ($data =~ s/^\t//); # contents of line
                        if ($data =~ /^(\S+)(?: (.*))?$/) {
-                               $meta->{$1} = $2;
+                               $meta->{$1} = $2 unless exists $meta->{$1};
                        }
                }
                my $short_rev = substr($full_rev, 0, 8);
@@ -4853,20 +4853,21 @@ HTML
                                      esc_html($short_rev));
                        print "</td>\n";
                }
-               my $parent_commit;
-               if (!exists $meta->{'parent'}) {
-                       open (my $dd, "-|", git_cmd(), "rev-parse", "$full_rev^")
-                               or die_error(500, "Open git-rev-parse failed");
-                       $parent_commit = <$dd>;
-                       close $dd;
-                       chomp($parent_commit);
-                       $meta->{'parent'} = $parent_commit;
-               } else {
-                       $parent_commit = $meta->{'parent'};
-               }
+               # 'previous' <sha1 of parent commit> <filename at commit>
+               if (exists $meta->{'previous'} &&
+                   $meta->{'previous'} =~ /^([a-fA-F0-9]{40}) (.*)$/) {
+                       $meta->{'parent'} = $1;
+                       $meta->{'file_parent'} = unquote($2);
+               }
+               my $linenr_commit =
+                       exists($meta->{'parent'}) ?
+                       $meta->{'parent'} : $full_rev;
+               my $linenr_filename =
+                       exists($meta->{'file_parent'}) ?
+                       $meta->{'file_parent'} : unquote($meta->{'filename'});
                my $blamed = href(action => 'blame',
-                                 file_name => $meta->{'filename'},
-                                 hash_base => $parent_commit);
+                                 file_name => $linenr_filename,
+                                 hash_base => $linenr_commit);
                print "<td class=\"linenr\">";
                print $cgi->a({ -href => "$blamed#l$orig_lineno",
                                -class => "linenr" },
This page took 0.216517 seconds and 4 git commands to generate.