From: Markos Chandras <Markos.Chandras@imgtec.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: <git@vger.kernel.org>
Subject: Re: git rerere is confused with identical conflicts in multiple files
Date: Fri, 10 Jul 2015 16:21:52 +0100 [thread overview]
Message-ID: <559FE310.5060204@imgtec.com> (raw)
In-Reply-To: <xmqqvbdsksmv.fsf@gitster.dls.corp.google.com>
Hi,
On 07/10/2015 03:13 PM, Junio C Hamano wrote:
> Markos Chandras <Markos.Chandras@imgtec.com> writes:
>
>> $ cat .git/MERGE_RR
>> 5563edc0fb427275a0ca5677c93c40def8b53258
>> arch/mips/include/asm/cpu-type.hf175ff6228f624296b661664bce4ab4e84d712cc
>>
>> arch/mips/include/asm/cpu.h5563edc0fb427275a0ca5677c93c40def8b53258
>> arch/mips/kernel/idle.c5563edc0fb427275a0ca5677c93c40def8b53258
>> arch/mips/kernel/spram.c5563edc0fb427275a0ca5677c93c40def8b53258
>> arch/mips/kernel/traps.c5563edc0fb427275a0ca5677c93c40def8b53258
>> arch/mips/mm/c-r4k.c
>>
>> so as you see, multiple files share the same hash. That's probably
>> because the "conflicting context ( the part between >>> <<<<)" in every
>> file but cpu.h is identical and git seems to calculate the hash purely
>> on the conflicting context. That makes git rerere thinks that it only
>> has to resolve 2 conflicts instead of 6.
>
> Yes, that is by design, and should not change. The thing is, you do
> want to share the same resolution across files, regardless of the
> path, when the recorded resolution replays cleanly [*1*].
I see.
> [...]
>
> The thing to fix is "did it conflict, if so punt" step. Within the
> same conflict ID, we would introduce the concept of "variant", and
> allow you to keep rr_cache/$ID/{preimage,postimage}.$variant. The
> first part of the per MERGE_RR entry process would instead go like
> so:
>
> - Does rr-cache/$ID/ has one or more postimages?
> - If so, for each variant, attempt three-way merge using
> preimage, postimage and thisimage.
> - Did one of the three-way merges replay cleanly?
> - If so, be happy.
> - If not, assign an unused variant to this path and change
> its MERGE_RR entry from $ID to $ID.$variant
>
> - Does path still have conflicts?
> - If not, record rr-cache/$ID/postimage for "variant".
>
> The current "preimage", "postimage" will be kept as the first
> variant in rr-cache/$ID/ directory. The second variant will likely
> be named (I don't have a code yet but have been slowly laying out
> the fundation to allow us to do this) "preimage.0" and "postimage.0",
> and the third one will have ".1" suffix.
>
> This approach has the added benefit that existing rr-cache entries
> will stay valid (in addition to being able to replay the same
> resolution even after you renamed the path that conflict, unlike the
> case when you hashed the pathname together to break the conflict ID
> computtion).
I understand. Thanks for the explanation.
>
> A WIP has been published on jc/rerere topic in my repository for the
> past few weeks, but I haven't reached the interesting "multi variant"
> part yet, as I said.
I am happy to test it when you have something more complete. If you can
reply to this e-mail when the 'variant' patch finds its way into the
master branch that would be great as well
--
markos
prev parent reply other threads:[~2015-07-10 15:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-10 8:04 git rerere is confused with identical conflicts in multiple files Markos Chandras
2015-07-10 14:13 ` Junio C Hamano
2015-07-10 15:21 ` Markos Chandras [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=559FE310.5060204@imgtec.com \
--to=markos.chandras@imgtec.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.