You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
#!/bin/sh |
|
|
|
test_description='checkout -m -- <conflicted path> |
|
|
|
Ensures that checkout -m on a resolved file restores the conflicted file' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
test_tick && |
|
test_commit both.txt both.txt initial && |
|
git branch topic && |
|
test_commit modified_in_master both.txt in_master && |
|
test_commit added_in_master each.txt in_master && |
|
git checkout topic && |
|
test_commit modified_in_topic both.txt in_topic && |
|
test_commit added_in_topic each.txt in_topic |
|
' |
|
|
|
test_expect_success 'git merge master' ' |
|
test_must_fail git merge master |
|
' |
|
|
|
clean_branchnames () { |
|
# Remove branch names after conflict lines |
|
sed 's/^\([<>]\{5,\}\) .*$/\1/' |
|
} |
|
|
|
test_expect_success '-m restores 2-way conflicted+resolved file' ' |
|
cp each.txt each.txt.conflicted && |
|
echo resolved >each.txt && |
|
git add each.txt && |
|
git checkout -m -- each.txt && |
|
clean_branchnames <each.txt >each.txt.cleaned && |
|
clean_branchnames <each.txt.conflicted >each.txt.conflicted.cleaned && |
|
test_cmp each.txt.conflicted.cleaned each.txt.cleaned |
|
' |
|
|
|
test_expect_success '-m restores 3-way conflicted+resolved file' ' |
|
cp both.txt both.txt.conflicted && |
|
echo resolved >both.txt && |
|
git add both.txt && |
|
git checkout -m -- both.txt && |
|
clean_branchnames <both.txt >both.txt.cleaned && |
|
clean_branchnames <both.txt.conflicted >both.txt.conflicted.cleaned && |
|
test_cmp both.txt.conflicted.cleaned both.txt.cleaned |
|
' |
|
|
|
test_expect_success 'force checkout a conflict file creates stage zero entry' ' |
|
git init co-force && |
|
( |
|
cd co-force && |
|
echo a >a && |
|
git add a && |
|
git commit -ama && |
|
A_OBJ=$(git rev-parse :a) && |
|
git branch topic && |
|
echo b >a && |
|
git commit -amb && |
|
B_OBJ=$(git rev-parse :a) && |
|
git checkout topic && |
|
echo c >a && |
|
C_OBJ=$(git hash-object a) && |
|
git checkout -m master && |
|
test_cmp_rev :1:a $A_OBJ && |
|
test_cmp_rev :2:a $B_OBJ && |
|
test_cmp_rev :3:a $C_OBJ && |
|
git checkout -f topic && |
|
test_cmp_rev :0:a $A_OBJ |
|
) |
|
' |
|
|
|
test_done
|
|
|