On Fri, Aug 07, 2020 at 06:26:30PM -0400, Jeff King wrote: > On Fri, Aug 07, 2020 at 03:05:27PM -0700, Junio C Hamano wrote: > > > Jeff King <peff@xxxxxxxx> writes: > > > > > Dropping it entirely, as below, doesn't break any tests. Junio, do you > > > know of a case this is meant to improve? > > > > I think the only conceivable case is that in the middle of a single > > block of text in an ancient version, another block of lines gets > > inserted during the evolution of the file, but in the end these > > intermediate edits all go away and the same original text remains. > > > > In such a case, without coalescing, we would not treat the original > > single block of text as a single unit. > > Yeah, that makes sense, and it should be possible to construct a case > based on that. It was even easier than I expected. :) Try this: git init repo cd repo seq 20 >file git add file git commit -m base { seq 10; echo foo; seq 11 20; } >file git commit -am cruft seq 20 >file git commit -am revert git blame --root --porcelain file With the coalescing, we get a single 20-line block: 25d93ad4c4b27570ccd4b6412ccaa549ae6f9ff7 1 1 20 author Jeff King ... 1 ... 25d93ad4c4b27570ccd4b6412ccaa549ae6f9ff7 11 11 11 and without it, we get two 10-line blocks: 25d93ad4c4b27570ccd4b6412ccaa549ae6f9ff7 1 1 10 author Jeff King ... 1 ... 25d93ad4c4b27570ccd4b6412ccaa549ae6f9ff7 11 11 10 11 I doubt it really matters all that much in practice, but it's possible some consumer of --porcelain relies on us giving minimal blocks. So that argues for fixing blame_coalesce() to make sure that we coalesce only when the blocks are adjacent in both the source and the result. Otherwise we're losing information. -Peff