Eric Sunshine <sunshine@xxxxxxxxxxxxxx> writes: > git-contacts invokes git-blame once for each patch hunk it encounters. > No attempt is made to consolidate invocations for multiple hunks > referencing the same file at the same revision. This can become > expensive quickly. > > Reduce the number of git-blame invocations by taking advantage of the > ability to specify multiple -L ranges for a single invocation. > > Without this patch, on a randomly chosen range of commits: > > % time git-contacts 25fba78d36be6297^..23c339c0f262aad2 >/dev/null > real 0m6.142s > user 0m5.429s > sys 0m0.356s > > With this patch: > > % time git-contacts 25fba78d36be6297^..23c339c0f262aad2 >/dev/null > real 0m2.285s > user 0m2.093s > sys 0m0.165s > > Signed-off-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> Nice. Will queue. > --- > contrib/contacts/git-contacts | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts > index b4d3526..fb6429b 100755 > --- a/contrib/contacts/git-contacts > +++ b/contrib/contacts/git-contacts > @@ -59,9 +59,11 @@ sub import_commits { > } > > sub get_blame { > - my ($commits, $source, $start, $len, $from) = @_; > + my ($commits, $source, $from, $ranges) = @_; > + return unless @$ranges; > open my $f, '-|', > - qw(git blame --porcelain -C), '-L', "$start,+$len", > + qw(git blame --porcelain -C), > + map({"-L$_->[0],+$_->[1]"} @$ranges), > '--since', $since, "$from^", '--', $source or die; > while (<$f>) { > if (/^([0-9a-f]{40}) \d+ \d+ \d+$/) { > @@ -78,10 +80,7 @@ sub blame_sources { > my ($sources, $commits) = @_; > for my $s (keys %$sources) { > for my $id (keys %{$sources->{$s}}) { > - for my $range (@{$sources->{$s}{$id}}) { > - get_blame($commits, $s, > - $range->[0], $range->[1], $id); > - } > + get_blame($commits, $s, $id, $sources->{$s}{$id}); > } > } > } -- 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