git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* git rerere and diff3
@ 2018-06-26 13:25 Nicolas Dechesne
  2018-06-26 19:05 ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Nicolas Dechesne @ 2018-06-26 13:25 UTC (permalink / raw)
  To: git

hi there,

i have noticed that merge.conflictstyle has an impact on the rerere
resolution. looking briefly at the source code, it seems that git
tries to discard the common ancestor diff3 bits, but what I am seeing
is that if i do the following then it fails:

1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
merge <branch with conflict>, resolve the conflicts, then commit
2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
diff3) and merge the *same* branch, then rerere won't fix the
conflicts

Is that the expected behavior? I am not familiar with git code, but
browsing rerere.c makes me think that it should have worked..

Of course, if I merge the same branch without modifying
merge.conflictstyle, then the merge conflicts are properly resolved by
rerere.

thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: git rerere and diff3
  2018-06-26 13:25 git rerere and diff3 Nicolas Dechesne
@ 2018-06-26 19:05 ` Junio C Hamano
  2018-06-26 19:37   ` Nicolas Dechesne
  0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2018-06-26 19:05 UTC (permalink / raw)
  To: Nicolas Dechesne; +Cc: git

Nicolas Dechesne <nicolas.dechesne@linaro.org> writes:

> i have noticed that merge.conflictstyle has an impact on the rerere
> resolution. looking briefly at the source code, it seems that git
> tries to discard the common ancestor diff3 bits, but what I am seeing
> is that if i do the following then it fails:
>
> 1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
> merge <branch with conflict>, resolve the conflicts, then commit
> 2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
> diff3) and merge the *same* branch, then rerere won't fix the
> conflicts

It is possible that the conflict left when making the same merge are
actually different when using these two conflict styles.  IOW, if
the merge produces

	<<<
	side A
	|||
	common
	===
	side B
	>>>

when diff3 style is chosen, but if the same merge results in

	<<<
	side A'
	===
	side B'
	>>>

where side A' is not identical to side A (or B' and B are not
identical), then we will fail to find the previously recorded
resolution.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: git rerere and diff3
  2018-06-26 19:05 ` Junio C Hamano
@ 2018-06-26 19:37   ` Nicolas Dechesne
  0 siblings, 0 replies; 3+ messages in thread
From: Nicolas Dechesne @ 2018-06-26 19:37 UTC (permalink / raw)
  To: gitster; +Cc: git

On Tue, Jun 26, 2018 at 9:05 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> Nicolas Dechesne <nicolas.dechesne@linaro.org> writes:
>
> > i have noticed that merge.conflictstyle has an impact on the rerere
> > resolution. looking briefly at the source code, it seems that git
> > tries to discard the common ancestor diff3 bits, but what I am seeing
> > is that if i do the following then it fails:
> >
> > 1. from a clean rr-cache state, with merge.conflictsytle=diff3, git
> > merge <branch with conflict>, resolve the conflicts, then commit
> > 2. undo the previous merge, remove merge.conflictstyle=diff3 (disable
> > diff3) and merge the *same* branch, then rerere won't fix the
> > conflicts
>
> It is possible that the conflict left when making the same merge are
> actually different when using these two conflict styles.  IOW, if
> the merge produces
>
>         <<<
>         side A
>         |||
>         common
>         ===
>         side B
>         >>>
>
> when diff3 style is chosen, but if the same merge results in
>
>         <<<
>         side A'
>         ===
>         side B'
>         >>>
>
> where side A' is not identical to side A (or B' and B are not
> identical), then we will fail to find the previously recorded
> resolution.

well, you're rigth.. that's what's happening...

=== with conflictstyle=merge
diff --cc arch/arm64/configs/defconfig
index 3cfa8ca26738,d53a1b00ad82..000000000000
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@@ -356,7 -334,7 +357,11 @@@ CONFIG_GPIO_PCA953X=
  CONFIG_GPIO_PCA953X_IRQ=y
  CONFIG_GPIO_MAX77620=y
  CONFIG_POWER_AVS=y
++<<<<<<< HEAD
 +CONFIG_ROCKCHIP_IODOMAIN=y
++=======
+ CONFIG_QCOM_CPR=y
++>>>>>>> tracking-qcomlt-8016-dvfs
  CONFIG_POWER_RESET_MSM=y
  CONFIG_POWER_RESET_XGENE=y
  CONFIG_POWER_RESET_SYSCON=y

=== with conflictstyle=diff3
diff --cc arch/arm64/configs/defconfig
index 3cfa8ca26738,d53a1b00ad82..000000000000
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@@ -355,8 -333,8 +356,14 @@@ CONFIG_GPIO_XGENE_SB=
  CONFIG_GPIO_PCA953X=y
  CONFIG_GPIO_PCA953X_IRQ=y
  CONFIG_GPIO_MAX77620=y
++<<<<<<< HEAD
 +CONFIG_POWER_AVS=y
 +CONFIG_ROCKCHIP_IODOMAIN=y
++||||||| merged common ancestors
++=======
+ CONFIG_POWER_AVS=y
+ CONFIG_QCOM_CPR=y
++>>>>>>> tracking-qcomlt-8016-dvfs
  CONFIG_POWER_RESET_MSM=y
  CONFIG_POWER_RESET_XGENE=y
  CONFIG_POWER_RESET_SYSCON=y

that explains it.. it was simpler than what I thought..

thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-26 19:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-26 13:25 git rerere and diff3 Nicolas Dechesne
2018-06-26 19:05 ` Junio C Hamano
2018-06-26 19:37   ` Nicolas Dechesne

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).