git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] rerere: demonstrate a weakness with identical conflicts in different files

From
Johannes Sixt <j.sixt@viscovery.net>
Date
Aug 12, 2010, 07:28 UTC
Message-ID
<4C63A292.4010604@viscovery.net>
In-Reply-To
<7vfwykv92a.fsf@alter.siamese.dyndns.org>
Am 8/12/2010 4:50, schrieb Junio C Hamano:
Show 10 quoted lines
> Yes, rr-cache/ database keys off of the
> conflict id, so if your repository has more than one contents that produce
> exactly the same conflict, say F and G, then, most likely:
> 
>  * You see one of them first, say F, record preimage.F and record its
>    resolution as postimage.F
> 
>  * You encounter conflict G; record it in thisimage, try three-way merge
>    between postimage.F and that using preimage.F as the common ancestor.
>    If this doesn't work (and it likely doesn't), rerere punts.

Aha! Since the files differ in the immediate neighborhood of the context markers, the merge that applies the resolution fails.

Squash in this and the test passes:
diff --git a/t/t4208-rerere-dup.sh b/t/t4208-rerere-dup.sh
index 34c182a..2afa0ef 100755
--- a/t/t4208-rerere-dup.sh
+++ b/t/t4208-rerere-dup.sh
@@ -12,6 +12,7 @@
 test_expect_success 'setup' '
 	cat > a1 <<- EOF &&
 	alpha
+	delta
 	beta
 	gamma
 	EOF
@@ -23,6 +24,7 @@ test_expect_success 'setup' '
 	git checkout -b first &&
 	cat > a1 <<- EOF &&
 	alpha
+	delta
 	BETA
 	gamma
 	EOF
@@ -32,6 +34,7 @@ test_expect_success 'setup' '
 	git checkout master &&
 	cat > a1 <<- EOF &&
 	alpha
+	delta
 	----
 	gamma
 	EOF
@@ -49,6 +52,7 @@ test_expect_success 'merge records
 test_expect_success 'record a resolution' '
 	cat > a1 <<- EOF &&
 	alpha
+	delta
 	--beta--
 	gamma
 	EOF
@@ -61,7 +65,7 @@ test_expect_success 'postimage must
 '

 test_expect_success 'same resolution recorded twice' '
-	test $(grep "Recorded resolution" actual | wc -l) = 2 &&
+#	test $(grep "Recorded resolution" actual | wc -l) = 2 &&
 	test $(ls .git/rr-cache | wc -w) = 1
 '


The last hunk is necessary because the output of rerere is now:

Recorded resolution for 'a1'.
Resolved 'a2' using previous resolution.

where the second statement is slightly misleading because the resolution
was not "used". But already present in the file (the resolution-merge
still succeeded, hence, rerere thought it had "used" the resolution).

I assumed that in my case I had identical text immediately outside the
conflict markers, and so I also assumed that the resolution-merge would
succeed, but it seems I was wrong. I'll go back and investigate closer as
time permits.

Thanks for your help so far.

-- Hannes
Previous: Junio C Hamano
Message 4 of 4 in “rerere: demonstrate a weakness with identical conflicts in different files”
  1. rerere: demonstrate a weakness with identical conflicts in different filesJohannes Sixt, Aug 11, 2010
  2. Junio C HamanoAug 11, 2010
  3. Junio C HamanoAug 12, 2010
  4. Johannes SixtAug 12, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.