Re: [WIP PATCH] Manual rename correction
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Aug 1, 2012, 01:10 UTC
- Message-ID
- <CACsJy8B14qSLkAt9VRQTCkoZx5UtGTpAmMHKyqk+_o14bc9GmQ@mail.gmail.com>
- In-Reply-To
- <20120731192342.GB30808@sigill.intra.peff.net>
On Wed, Aug 1, 2012 at 2:23 AM, Jeff King <peff@peff.net> wrote:
Show 15 quoted lines
>> It is a good direction to go in, I would think, to give users a way
>> to explicitly tell that "in comparison between these two trees, I
>> know path B in the postimage corresponds to path A in the preimage".
>
> I do not think that is the right direction. Let's imagine that I have a
> commit "A" and I annotate it (via notes or whatever) to say "between
> A^^{tree} and A^{tree}, foo.c became bar.c". That will help me when
> doing "git show" or "git log". But it will not help me when I later try
> to merge "A" (or its descendent). In that case, I will compute the diff
> between "A" and the merge-base (or worse, some descendent of "A" and the
> merge-base), and I will miss this hint entirely.
>
> A much better hint is to annotate pairs of sha1s, to say "do not bother
> doing inexact rename correlation on this pair; I promise that they have
> value N".I haven't had time to think it through yet but I throw my thoughts in any way. I actually went with your approach first. But it's more difficult to control the renaming. Assume we want to tell git to rename SHA-1 "A" to SHA-1 "B". What happens if we have two As in the source tree and two Bs in the target tree? What happens if two As and one B, or one A and two Bs? What if a user defines A -> B and A -> C, and we happen to have two As in source tree and B and C in target tree?
There's also the problem with transferring this information. With git-notes I think I can transfer it (though not automatically). How do we transfer sha1 map (that you mentioned in the commit generation mail in this thread)?
> Then it will find that pair no matter which trees or commits > are being diffed, and it will do so relatively inexpensively[1].
But does that happen often in practice? I mean diff-ing two arbitrary trees and expect rename correction. I disregarded it as "git log" is my main case, but I'm just a single user..
-- Duy