Browse Source
We are about to change the format of the conflict hunks that cherry-pick and revert write. Add tests checking the current behavior first. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Jonathan Nieder
15 years ago
committed by
Junio C Hamano
1 changed files with 198 additions and 0 deletions
@ -0,0 +1,198 @@
@@ -0,0 +1,198 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='test cherry-pick and revert with conflicts |
||||
|
||||
- |
||||
+ picked: rewrites foo to c |
||||
+ base: rewrites foo to b |
||||
+ initial: writes foo as a, unrelated as unrelated |
||||
|
||||
' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success setup ' |
||||
|
||||
echo unrelated >unrelated && |
||||
git add unrelated && |
||||
test_commit initial foo a && |
||||
test_commit base foo b && |
||||
test_commit picked foo c && |
||||
git config advice.detachedhead false |
||||
|
||||
' |
||||
|
||||
test_expect_success 'failed cherry-pick does not advance HEAD' ' |
||||
|
||||
git checkout -f initial^0 && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
head=$(git rev-parse HEAD) && |
||||
test_must_fail git cherry-pick picked && |
||||
newhead=$(git rev-parse HEAD) && |
||||
|
||||
test "$head" = "$newhead" |
||||
' |
||||
|
||||
test_expect_success 'failed cherry-pick produces dirty index' ' |
||||
|
||||
git checkout -f initial^0 && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
test_must_fail git cherry-pick picked && |
||||
|
||||
test_must_fail git update-index --refresh -q && |
||||
test_must_fail git diff-index --exit-code HEAD |
||||
' |
||||
|
||||
test_expect_success 'failed cherry-pick registers participants in index' ' |
||||
|
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
{ |
||||
git checkout base -- foo && |
||||
git ls-files --stage foo && |
||||
git checkout initial -- foo && |
||||
git ls-files --stage foo && |
||||
git checkout picked -- foo && |
||||
git ls-files --stage foo |
||||
} > stages && |
||||
sed " |
||||
1 s/ 0 / 1 / |
||||
2 s/ 0 / 2 / |
||||
3 s/ 0 / 3 / |
||||
" < stages > expected && |
||||
git checkout -f initial^0 && |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
test_must_fail git cherry-pick picked && |
||||
git ls-files --stage --unmerged > actual && |
||||
|
||||
test_cmp expected actual |
||||
' |
||||
|
||||
test_expect_success 'failed cherry-pick describes conflict in work tree' ' |
||||
|
||||
git checkout -f initial^0 && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
cat <<-EOF > expected && |
||||
<<<<<<< HEAD |
||||
a |
||||
======= |
||||
c |
||||
>>>>>>> objid picked |
||||
EOF |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
test_must_fail git cherry-pick picked && |
||||
|
||||
sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && |
||||
test_cmp expected actual |
||||
' |
||||
|
||||
test_expect_success 'diff3 -m style' ' |
||||
|
||||
git config merge.conflictstyle diff3 && |
||||
git checkout -f initial^0 && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
cat <<-EOF > expected && |
||||
<<<<<<< HEAD |
||||
a |
||||
||||||| |
||||
b |
||||
======= |
||||
c |
||||
>>>>>>> objid picked |
||||
EOF |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
test_must_fail git cherry-pick picked && |
||||
|
||||
sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && |
||||
test_cmp expected actual |
||||
' |
||||
|
||||
test_expect_success 'revert also handles conflicts sanely' ' |
||||
|
||||
git config --unset merge.conflictstyle && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
cat <<-EOF > expected && |
||||
<<<<<<< HEAD |
||||
a |
||||
======= |
||||
b |
||||
>>>>>>> objid picked |
||||
EOF |
||||
{ |
||||
git checkout picked -- foo && |
||||
git ls-files --stage foo && |
||||
git checkout initial -- foo && |
||||
git ls-files --stage foo && |
||||
git checkout base -- foo && |
||||
git ls-files --stage foo |
||||
} > stages && |
||||
sed " |
||||
1 s/ 0 / 1 / |
||||
2 s/ 0 / 2 / |
||||
3 s/ 0 / 3 / |
||||
" < stages > expected-stages && |
||||
git checkout -f initial^0 && |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
head=$(git rev-parse HEAD) && |
||||
test_must_fail git revert picked && |
||||
newhead=$(git rev-parse HEAD) && |
||||
git ls-files --stage --unmerged > actual-stages && |
||||
|
||||
test "$head" = "$newhead" && |
||||
test_must_fail git update-index --refresh -q && |
||||
test_must_fail git diff-index --exit-code HEAD && |
||||
test_cmp expected-stages actual-stages && |
||||
sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && |
||||
test_cmp expected actual |
||||
' |
||||
|
||||
test_expect_success 'revert conflict, diff3 -m style' ' |
||||
git config merge.conflictstyle diff3 && |
||||
git checkout -f initial^0 && |
||||
git read-tree -u --reset HEAD && |
||||
git clean -d -f -f -q -x && |
||||
cat <<-EOF > expected && |
||||
<<<<<<< HEAD |
||||
a |
||||
||||||| |
||||
c |
||||
======= |
||||
b |
||||
>>>>>>> objid picked |
||||
EOF |
||||
|
||||
git update-index --refresh && |
||||
git diff-index --exit-code HEAD && |
||||
|
||||
test_must_fail git revert picked && |
||||
|
||||
sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && |
||||
test_cmp expected actual |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue