Subject: Re: [PATCH 2/2] line-log: avoid unnecessary full tree diffs

From: SZEDER Gábor <[email-masked]>
Date: Thu, 22 Aug 2019 18:26:56 +0200

On Thu, Aug 22, 2019 at 09:01:44AM -0700, Junio C Hamano wrote:
> SZEDER Gábor <[email-masked]> writes:
> 
> > Well, that fruit hung much lower than I though, just look at the size
> > of the WIP patch below.  I just hope that there are no unexpected
> > surprises, but FWIW it produces the exact same output for all files up
> > to 't/t5515' in v2.23.0 as the previous patch.
> >
> > Can't wait to see how it fares with that evil Windows path :)
> >
> >   --- >8 ---
> >
> > Subject: [PATCH 3/2] WIP line-log: stop diff-ing after first TREESAME merge parent
> 
> A quick question.  That we need "stop diffing after first treesame"
> patch in the first place means we have always been attempting to
> follow all the parents of a merge?

To follow, no.

But there are two subsequent loops: the first loop computed the diffs
between the merge and each of its parents, while the second processed
those diffs, and returned as soon as it found a treesame parent,
without following the others.

This patch unified those two loops so it computes the diff with the
first parent, and then processes that diff right away, and returns if
treesame, thereby avoding diffing the remaining parents.

>  I'd expect that to happen when
> "--full-history" was given to "git log -L..." invocation.

Oh, right, I didn't consider '--full-history'.  In that case it should
not stop at the first parent.

Hmm, looking into this, it seems that line-level log doesn't work with
'--full-history' to begin with:

  # Each commit does what the subject says.
  $ git log --oneline --graph
  *   f9bf557 (HEAD -> master) Merge branch 'branch'
  |\  
  | * 1b573fb (branch) Revert "Modify file"
  | * 3634cf3 Modify file
  |/  
  * 8842c18 Add file
  $ git log --oneline file
  8842c18 Add file
  $ git log --oneline --full-history file
  1b573fb (branch) Revert "Modify file"
  3634cf3 Modify file
  8842c18 Add file
  $ ~/src/git/BUILDS/v2.23.0/bin/git log -L1:file --oneline --no-patch
  8842c18 Add file
  $ ~/src/git/BUILDS/v2.23.0/bin/git log -L1:file --oneline --no-patch --full-history
  8842c18 Add file