Browse Source

t3507: introduce pristine-detach helper

All the tests in t3507 (cherry-pick with conflicts) begin with the
same checkout + read-tree + clean incantation to ensure a predictable
starting point.  Factor out a function for that so the interesting
part of the tests is easier to read.

The "update-index --refresh" and "diff-index --exit-code HEAD" are not
necessary as the point of this testsuite is not about testing
"read-tree --reset".

Improved-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Nieder 14 years ago committed by Junio C Hamano
parent
commit
2161da1039
  1. 76
      t/t3507-cherry-pick-conflict.sh

76
t/t3507-cherry-pick-conflict.sh

@ -11,6 +11,18 @@ test_description='test cherry-pick and revert with conflicts


. ./test-lib.sh . ./test-lib.sh


test_cmp_rev () {
git rev-parse --verify "$1" >expect.rev &&
git rev-parse --verify "$2" >actual.rev &&
test_cmp expect.rev actual.rev
}

pristine_detach () {
git checkout -f "$1^0" &&
git read-tree -u --reset HEAD &&
git clean -d -f -f -q -x
}

test_expect_success setup ' test_expect_success setup '


echo unrelated >unrelated && echo unrelated >unrelated &&
@ -23,13 +35,7 @@ test_expect_success setup '
' '


test_expect_success 'failed cherry-pick does not advance HEAD' ' test_expect_success 'failed cherry-pick does not advance HEAD' '

pristine_detach initial &&
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) && head=$(git rev-parse HEAD) &&
test_must_fail git cherry-pick picked && test_must_fail git cherry-pick picked &&
@ -39,12 +45,7 @@ test_expect_success 'failed cherry-pick does not advance HEAD' '
' '


test_expect_success 'advice from failed cherry-pick' " test_expect_success 'advice from failed cherry-pick' "
git checkout -f initial^0 && pristine_detach initial &&
git read-tree -u --reset HEAD &&
git clean -d -f -f -q -x &&

git update-index --refresh &&
git diff-index --exit-code HEAD &&


picked=\$(git rev-parse --short picked) && picked=\$(git rev-parse --short picked) &&
cat <<-EOF >expected && cat <<-EOF >expected &&
@ -59,13 +60,7 @@ test_expect_success 'advice from failed cherry-pick' "
" "


test_expect_success 'failed cherry-pick produces dirty index' ' test_expect_success 'failed cherry-pick produces dirty index' '

pristine_detach initial &&
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 cherry-pick picked &&


@ -74,9 +69,7 @@ test_expect_success 'failed cherry-pick produces dirty index' '
' '


test_expect_success 'failed cherry-pick registers participants in index' ' test_expect_success 'failed cherry-pick registers participants in index' '

pristine_detach initial &&
git read-tree -u --reset HEAD &&
git clean -d -f -f -q -x &&
{ {
git checkout base -- foo && git checkout base -- foo &&
git ls-files --stage foo && git ls-files --stage foo &&
@ -90,10 +83,7 @@ test_expect_success 'failed cherry-pick registers participants in index' '
2 s/ 0 / 2 / 2 s/ 0 / 2 /
3 s/ 0 / 3 / 3 s/ 0 / 3 /
" < stages > expected && " < stages > expected &&
git checkout -f initial^0 && git read-tree -u --reset HEAD &&

git update-index --refresh &&
git diff-index --exit-code HEAD &&


test_must_fail git cherry-pick picked && test_must_fail git cherry-pick picked &&
git ls-files --stage --unmerged > actual && git ls-files --stage --unmerged > actual &&
@ -102,10 +92,7 @@ test_expect_success 'failed cherry-pick registers participants in index' '
' '


test_expect_success 'failed cherry-pick describes conflict in work tree' ' test_expect_success 'failed cherry-pick describes conflict in work tree' '

pristine_detach initial &&
git checkout -f initial^0 &&
git read-tree -u --reset HEAD &&
git clean -d -f -f -q -x &&
cat <<-EOF > expected && cat <<-EOF > expected &&
<<<<<<< HEAD <<<<<<< HEAD
a a
@ -114,9 +101,6 @@ test_expect_success 'failed cherry-pick describes conflict in work tree' '
>>>>>>> objid picked >>>>>>> objid picked
EOF EOF


git update-index --refresh &&
git diff-index --exit-code HEAD &&

test_must_fail git cherry-pick picked && test_must_fail git cherry-pick picked &&


sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && sed "s/[a-f0-9]*\.\.\./objid/" foo > actual &&
@ -124,11 +108,8 @@ test_expect_success 'failed cherry-pick describes conflict in work tree' '
' '


test_expect_success 'diff3 -m style' ' test_expect_success 'diff3 -m style' '

pristine_detach initial &&
git config merge.conflictstyle diff3 && 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 && cat <<-EOF > expected &&
<<<<<<< HEAD <<<<<<< HEAD
a a
@ -139,9 +120,6 @@ test_expect_success 'diff3 -m style' '
>>>>>>> objid picked >>>>>>> objid picked
EOF EOF


git update-index --refresh &&
git diff-index --exit-code HEAD &&

test_must_fail git cherry-pick picked && test_must_fail git cherry-pick picked &&


sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && sed "s/[a-f0-9]*\.\.\./objid/" foo > actual &&
@ -149,10 +127,8 @@ test_expect_success 'diff3 -m style' '
' '


test_expect_success 'revert also handles conflicts sanely' ' test_expect_success 'revert also handles conflicts sanely' '

git config --unset merge.conflictstyle && git config --unset merge.conflictstyle &&
git read-tree -u --reset HEAD && pristine_detach initial &&
git clean -d -f -f -q -x &&
cat <<-EOF > expected && cat <<-EOF > expected &&
<<<<<<< HEAD <<<<<<< HEAD
a a
@ -173,10 +149,7 @@ test_expect_success 'revert also handles conflicts sanely' '
2 s/ 0 / 2 / 2 s/ 0 / 2 /
3 s/ 0 / 3 / 3 s/ 0 / 3 /
" < stages > expected-stages && " < stages > expected-stages &&
git checkout -f initial^0 && git read-tree -u --reset HEAD &&

git update-index --refresh &&
git diff-index --exit-code HEAD &&


head=$(git rev-parse HEAD) && head=$(git rev-parse HEAD) &&
test_must_fail git revert picked && test_must_fail git revert picked &&
@ -192,10 +165,8 @@ test_expect_success 'revert also handles conflicts sanely' '
' '


test_expect_success 'revert conflict, diff3 -m style' ' test_expect_success 'revert conflict, diff3 -m style' '
pristine_detach initial &&
git config merge.conflictstyle diff3 && 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 && cat <<-EOF > expected &&
<<<<<<< HEAD <<<<<<< HEAD
a a
@ -206,9 +177,6 @@ test_expect_success 'revert conflict, diff3 -m style' '
>>>>>>> parent of objid picked >>>>>>> parent of objid picked
EOF EOF


git update-index --refresh &&
git diff-index --exit-code HEAD &&

test_must_fail git revert picked && test_must_fail git revert picked &&


sed "s/[a-f0-9]*\.\.\./objid/" foo > actual && sed "s/[a-f0-9]*\.\.\./objid/" foo > actual &&

Loading…
Cancel
Save