Luben Tuikov changed 'lineno' link from leading to commit which lead to current version of given block of lines, to leading to parent of this commit in 244a70e (Blame "linenr" link jumps to previous state at "orig_lineno"). This supposedly made data mining possible (or just better). Unfortunately the implementation in 244a70e used one call for git-rev-parse to find parent revision per line in file, instead of using long lived "git cat-file --batch-check" (which might not existed then), or changing validate_refname to validate_revision and made it accept <rev>^, <rev>^^, <rev>^^^ etc. syntax. This patch attempts to migitate issue a bit by caching $parent_commit info in %metainfo, which makes gitweb to call git-rev-parse only once per unique commit in blame output. Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- That is what I have noticed during browsing git_blame() code. We can change it to even more effective implementation (like the ones proposed above in the commit message) later. Indenting is cause for artifically large diff gitweb/gitweb.perl | 16 +++++++++++----- 1 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 1b800f4..916396a 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -4657,11 +4657,17 @@ HTML esc_html($rev)); print "</td>\n"; } - open (my $dd, "-|", git_cmd(), "rev-parse", "$full_rev^") - or die_error(500, "Open git-rev-parse failed"); - my $parent_commit = <$dd>; - close $dd; - chomp($parent_commit); + 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'}; + } my $blamed = href(action => 'blame', file_name => $meta->{'filename'}, hash_base => $parent_commit); -- 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