# blame now knows -S

5 messages from 2006-04-07 to 2006-04-08. Participants: Junio C Hamano, Fredrik Kuivinen, Marco Costalba.
Thread: https://gitlist.dev/t/3819

## Junio C Hamano, 2006-04-07 09:28

Subject: blame now knows -S
Message-ID: <7v1ww9loon.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7v1ww9loon.fsf%40assigned-by-dhcp.cox.net

```
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, 2006-04-07 09:32

Subject: Re: blame now knows -S
Message-ID: <7vu095k9yi.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vu095k9yi.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <7v1ww9loon.fsf@assigned-by-dhcp.cox.net>

```
Junio C Hamano <junkio@cox.net> writes:

> 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, 2006-04-08 11:42

Subject: Re: blame now knows -S
Message-ID: <20060408114240.GA10137@c165.ib.student.liu.se>
URL: https://gitlist.dev/e/20060408114240.GA10137%40c165.ib.student.liu.se
In-Reply-To: <7v1ww9loon.fsf@assigned-by-dhcp.cox.net>

```
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.

- Fredrik

```

## Marco Costalba, 2006-04-08 13:53

Subject: Re: blame now knows -S
Message-ID: <e5bfff550604080653l2c73f844n8e03e55f9c467039@mail.gmail.com>
URL: https://gitlist.dev/e/e5bfff550604080653l2c73f844n8e03e55f9c467039%40mail.gmail.com
In-Reply-To: <20060408114240.GA10137@c165.ib.student.liu.se>

```
On 4/8/06, Fredrik Kuivinen <freku045@student.liu.se> wrote:
> 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, 2006-04-08 20:39

Subject: Re: blame now knows -S
Message-ID: <7vwtdzer9z.fsf@assigned-by-dhcp.cox.net>
URL: https://gitlist.dev/e/7vwtdzer9z.fsf%40assigned-by-dhcp.cox.net
In-Reply-To: <20060408114240.GA10137@c165.ib.student.liu.se>

```
Fredrik Kuivinen <freku045@student.liu.se> writes:

> 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.

```
