зеркало из https://github.com/microsoft/git.git
t4200: rerere a merge with two identical conflicts
When the context of multiple identical conflicts are different, two seemingly the same conflict resolution cannot be safely applied. In such a case, at least we should be able to record these two resolutions separately in the rerere database, and reuse them when we see the same conflict later. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
a13d13700b
Коммит
82efa6e27e
|
@ -406,4 +406,78 @@ test_expect_success 'rerere -h' '
|
|||
test_i18ngrep [Uu]sage help
|
||||
'
|
||||
|
||||
concat_insert () {
|
||||
last=$1
|
||||
shift
|
||||
cat early && printf "%s\n" "$@" && cat late "$last"
|
||||
}
|
||||
|
||||
test_expect_failure 'multiple identical conflicts' '
|
||||
git reset --hard &&
|
||||
|
||||
test_seq 1 6 >early &&
|
||||
>late &&
|
||||
test_seq 11 15 >short &&
|
||||
test_seq 111 120 >long &&
|
||||
concat_insert short >file1 &&
|
||||
concat_insert long >file2 &&
|
||||
git add file1 file2 &&
|
||||
git commit -m base &&
|
||||
git tag base &&
|
||||
git checkout -b six.1 &&
|
||||
concat_insert short 6.1 >file1 &&
|
||||
concat_insert long 6.1 >file2 &&
|
||||
git add file1 file2 &&
|
||||
git commit -m 6.1 &&
|
||||
git checkout -b six.2 HEAD^ &&
|
||||
concat_insert short 6.2 >file1 &&
|
||||
concat_insert long 6.2 >file2 &&
|
||||
git add file1 file2 &&
|
||||
git commit -m 6.2 &&
|
||||
|
||||
# At this point, six.1 and six.2
|
||||
# - derive from common ancestor that has two files
|
||||
# 1...6 7 11..15 (file1) and 1...6 7 111..120 (file2)
|
||||
# - six.1 replaces these 7s with 6.1
|
||||
# - six.2 replaces these 7s with 6.2
|
||||
|
||||
test_must_fail git merge six.1 &&
|
||||
|
||||
# Check that rerere knows that file1 and file2 have conflicts
|
||||
|
||||
printf "%s\n" file1 file2 >expect &&
|
||||
git ls-files -u | sed -e "s/^.* //" | sort -u >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
git rerere status | sort >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
# Resolution is to replace 7 with 6.1 and 6.2 (i.e. take both)
|
||||
concat_insert short 6.1 6.2 >file1 &&
|
||||
concat_insert long 6.1 6.2 >file2 &&
|
||||
|
||||
git rerere remaining >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
# We resolved file1 and file2
|
||||
git rerere &&
|
||||
>expect &&
|
||||
git rerere remaining >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
# Now we should be able to resolve them both
|
||||
git reset --hard &&
|
||||
test_must_fail git merge six.1 &&
|
||||
git rerere &&
|
||||
|
||||
>expect &&
|
||||
git rerere remaining >actual &&
|
||||
test_cmp expect actual &&
|
||||
|
||||
concat_insert short 6.1 6.2 >file1.expect &&
|
||||
concat_insert long 6.1 6.2 >file2.expect &&
|
||||
test_cmp file1.expect file1 &&
|
||||
test_cmp file2.expect file2
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче