From: Johannes Sixt Date: Wed, 11 Aug 2010 12:16:21 GMT Subject: [PATCH] rerere: demonstrate a weakness with identical conflicts in different files Message-ID: <4C629495.60105@viscovery.net> From: Johannes Sixt When code sections are duplicated in different files and identical conflicts arise simultaneously in these sections, then rerere resolves only the first one and leaves the others unresolved. Signed-off-by: Johannes Sixt --- I encounter this situation several times a year, and every now and then it is particularly annoying because the conflicts are extensive. I would appreciate if you could have a look whether this is fixed easily. I tried myself, but I can't find the point where the subsequent conflicts are ignored. -- Hannes t/t4208-rerere-dup.sh | 77 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 77 insertions(+), 0 deletions(-) create mode 100755 t/t4208-rerere-dup.sh diff --git a/t/t4208-rerere-dup.sh b/t/t4208-rerere-dup.sh new file mode 100755 index 0000000..34c182a --- /dev/null +++ b/t/t4208-rerere-dup.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# +# Copyright (c) 2010 Johannes Sixt +# + +test_description='test git rerere when sections of files are duplicated, +and identical conflicts arise in these sections simultaneously. +' + +. ./test-lib.sh + +test_expect_success 'setup' ' + cat > a1 <<- EOF && + alpha + beta + gamma + EOF + sed -e s/alpha/ALPHA/ a2 && + + git add a1 a2 && + git commit -q -a -m initial && + + git checkout -b first && + cat > a1 <<- EOF && + alpha + BETA + gamma + EOF + sed -e s/alpha/ALPHA/ a2 && + git commit -q -a -m first && + + git checkout master && + cat > a1 <<- EOF && + alpha + ---- + gamma + EOF + sed -e s/alpha/ALPHA/ a2 && + git commit -q -a -m master && + git config rerere.enabled true +' + +test_expect_success 'merge records only one conflict' ' + test_must_fail git merge first && + sha1=$(ls .git/rr-cache) && + test $(echo $sha1 | wc -w) = 1 +' + +test_expect_success 'record a resolution' ' + cat > a1 <<- EOF && + alpha + --beta-- + gamma + EOF + sed -e s/alpha/ALPHA/ a2 && + git rerere 2>actual +' + +test_expect_success 'postimage must exist' ' + test -f .git/rr-cache/$sha1/postimage +' + +test_expect_success 'same resolution recorded twice' ' + test $(grep "Recorded resolution" actual | wc -l) = 2 && + test $(ls .git/rr-cache | wc -w) = 1 +' + +test_expect_success 'repeat merge' ' + git reset --hard && + test_must_fail git merge first +' + +test_expect_failure 'both files are resolved' ' + ! grep ===== a1 a2 +' + +test_done -- 1.7.2.63.g079547