threads / discuss / 3819

blame now knows -S

Subject: blame now knows -S

## tl;dr

5 messages between Apr 7, 2006 and Apr 8, 2006.

replies: 4people: 3as markdown or json

Junio C Hamano· Apr 7, 2006, 09:28 UTC · lore
I've made a few changes to "git blame" myself:
 - fix breakage caused by recent revision walker reorganization;
 - use built-in xdiff instead of spawning GNU diff;
 - implement -S <ancestry-file> like annotate does.

Depending on the density of changes, it now appears that blame is 10%-30% faster than annotate. I thought CVS emulator might be interested to give it a whirl..

Junio C Hamano· Apr 7, 2006, 09:32 UTC · re: Junio C Hamano · lore

Re: blame now knows -S

Junio C Hamano <junkio@cox.net> writes:
Show 9 quoted lines
> I've made a few changes to "git blame" myself:
>
>  - fix breakage caused by recent revision walker reorganization;
>  - use built-in xdiff instead of spawning GNU diff;
>  - implement -S <ancestry-file> like annotate does.
>
> Depending on the density of changes, it now appears that blame
> is 10%-30% faster than annotate.  I thought CVS emulator might
> be interested to give it a whirl..

Sorry, forgot to mention... The updated blame will be in "next", not in "master" yet.

Fredrik Kuivinen· Apr 8, 2006, 11:42 UTC · re: Junio C Hamano · lore

Re: blame now knows -S

On Fri, Apr 07, 2006 at 02:28:40AM -0700, Junio C Hamano wrote:
Show 10 quoted lines
> I've made a few changes to "git blame" myself:
> 
>  - fix breakage caused by recent revision walker reorganization;
>  - use built-in xdiff instead of spawning GNU diff;
>  - implement -S <ancestry-file> like annotate does.
> 
> Depending on the density of changes, it now appears that blame
> is 10%-30% faster than annotate.  I thought CVS emulator might
> be interested to give it a whirl..
> 
Nice work!

There is another possible optimisation with respect to xdiff. Instead of producing the diff on the xdiff side and parsing the diff in blame.c, we could add another call back which just gets the relevant information from the hunk header. I don't know how much we would gain from this, but it might be worth a try.

- Fredrik
Marco Costalba· Apr 8, 2006, 13:53 UTC · re: Fredrik Kuivinen · lore

Re: blame now knows -S

On 4/8/06, Fredrik Kuivinen <freku045@student.liu.se> wrote:
Show 20 quoted lines
> On Fri, Apr 07, 2006 at 02:28:40AM -0700, Junio C Hamano wrote:
> > I've made a few changes to "git blame" myself:
> >
> >  - fix breakage caused by recent revision walker reorganization;
> >  - use built-in xdiff instead of spawning GNU diff;
> >  - implement -S <ancestry-file> like annotate does.
> >
> > Depending on the density of changes, it now appears that blame
> > is 10%-30% faster than annotate.  I thought CVS emulator might
> > be interested to give it a whirl..
> >
>
> Nice work!
>
> There is another possible optimisation with respect to xdiff. Instead
> of producing the diff on the xdiff side and parsing the diff in
> blame.c, we could add another call back which just gets the relevant
> information from the hunk header. I don't know how much we would gain
> from this, but it might be worth a try.
>

If I can comment on this thread, I would like to note IMHO that given the differences in languages (C vs Perl) and the use of almost the same algorithm, just a 10%-30% in speed difference between blame and annotate it means that any further optimization can gain little because the bottleneck is elsewhere.

And I think is in getting the revision's history. Call it git-rev-list, although both blame and annotate use directly the library revision.h

After the new xdiff merge, git-rev-list accounts for almost whole the time. Normally more then 80% in qgit.

Although the qgit annotation algorithm is different from both blame and annotate I think that a faster git-rev-list <path> or revison history walker as you may want to call it it's a key in really speed-up annotation stuff.

    Marco
Junio C Hamano· Apr 8, 2006, 20:39 UTC · re: Fredrik Kuivinen · lore

Re: blame now knows -S

Fredrik Kuivinen <freku045@student.liu.se> writes:
Show 5 quoted lines
> There is another possible optimisation with respect to xdiff. Instead
> of producing the diff on the xdiff side and parsing the diff in
> blame.c, we could add another call back which just gets the relevant
> information from the hunk header. I don't know how much we would gain
> from this, but it might be worth a try.

I've tried and then it turned out it did not make much of a difference.

← back to recent threads