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.
103 lines
3.2 KiB
103 lines
3.2 KiB
#!/bin/sh |
|
|
|
test_description='cherry-pick should rerere for conflicts' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
test_commit foo && |
|
test_commit foo-master foo && |
|
test_commit bar-master bar && |
|
|
|
git checkout -b dev foo && |
|
test_commit foo-dev foo && |
|
test_commit bar-dev bar && |
|
git config rerere.enabled true |
|
' |
|
|
|
test_expect_success 'conflicting merge' ' |
|
test_must_fail git merge master |
|
' |
|
|
|
test_expect_success 'fixup' ' |
|
echo foo-resolved >foo && |
|
echo bar-resolved >bar && |
|
git commit -am resolved && |
|
cp foo foo-expect && |
|
cp bar bar-expect && |
|
git reset --hard HEAD^ |
|
' |
|
|
|
test_expect_success 'cherry-pick conflict with --rerere-autoupdate' ' |
|
test_must_fail git cherry-pick --rerere-autoupdate foo..bar-master && |
|
test_cmp foo-expect foo && |
|
git diff-files --quiet && |
|
test_must_fail git cherry-pick --continue && |
|
test_cmp bar-expect bar && |
|
git diff-files --quiet && |
|
git cherry-pick --continue && |
|
git reset --hard bar-dev |
|
' |
|
|
|
test_expect_success 'cherry-pick conflict repsects rerere.autoUpdate' ' |
|
test_config rerere.autoUpdate true && |
|
test_must_fail git cherry-pick foo..bar-master && |
|
test_cmp foo-expect foo && |
|
git diff-files --quiet && |
|
test_must_fail git cherry-pick --continue && |
|
test_cmp bar-expect bar && |
|
git diff-files --quiet && |
|
git cherry-pick --continue && |
|
git reset --hard bar-dev |
|
' |
|
|
|
test_expect_success 'cherry-pick conflict with --no-rerere-autoupdate' ' |
|
test_config rerere.autoUpdate true && |
|
test_must_fail git cherry-pick --no-rerere-autoupdate foo..bar-master && |
|
test_cmp foo-expect foo && |
|
test_must_fail git diff-files --quiet && |
|
git add foo && |
|
test_must_fail git cherry-pick --continue && |
|
test_cmp bar-expect bar && |
|
test_must_fail git diff-files --quiet && |
|
git add bar && |
|
git cherry-pick --continue && |
|
git reset --hard bar-dev |
|
' |
|
|
|
test_expect_success 'cherry-pick --continue rejects --rerere-autoupdate' ' |
|
test_must_fail git cherry-pick --rerere-autoupdate foo..bar-master && |
|
test_cmp foo-expect foo && |
|
git diff-files --quiet && |
|
test_must_fail git cherry-pick --continue --rerere-autoupdate >actual 2>&1 && |
|
echo "fatal: cherry-pick: --rerere-autoupdate cannot be used with --continue" >expect && |
|
test_i18ncmp expect actual && |
|
test_must_fail git cherry-pick --continue --no-rerere-autoupdate >actual 2>&1 && |
|
echo "fatal: cherry-pick: --no-rerere-autoupdate cannot be used with --continue" >expect && |
|
test_i18ncmp expect actual && |
|
git cherry-pick --abort |
|
' |
|
|
|
test_expect_success 'cherry-pick --rerere-autoupdate more than once' ' |
|
test_must_fail git cherry-pick --rerere-autoupdate --rerere-autoupdate foo..bar-master && |
|
test_cmp foo-expect foo && |
|
git diff-files --quiet && |
|
git cherry-pick --abort && |
|
test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate foo..bar-master && |
|
test_cmp foo-expect foo && |
|
git diff-files --quiet && |
|
git cherry-pick --abort && |
|
test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate foo..bar-master && |
|
test_must_fail git diff-files --quiet && |
|
git cherry-pick --abort |
|
' |
|
|
|
test_expect_success 'cherry-pick conflict without rerere' ' |
|
test_config rerere.enabled false && |
|
test_must_fail git cherry-pick foo-master && |
|
grep ===== foo && |
|
grep foo-dev foo && |
|
grep foo-master foo |
|
' |
|
|
|
test_done
|
|
|