1#!/bin/sh 2 3test_description='cherry-pick should rerere for conflicts' 4 5GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 6export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 7 8. ./test-lib.sh 9 10test_expect_success setup ' 11 test_commit foo && 12 test_commit foo-main foo && 13 test_commit bar-main bar && 14 15 git checkout -b dev foo && 16 test_commit foo-dev foo && 17 test_commit bar-dev bar && 18 git config rerere.enabled true 19' 20 21test_expect_success 'conflicting merge' ' 22 test_must_fail git merge main 23' 24 25test_expect_success 'fixup' ' 26 echo foo-resolved >foo && 27 echo bar-resolved >bar && 28 git commit -am resolved && 29 cp foo foo-expect && 30 cp bar bar-expect && 31 git reset --hard HEAD^ 32' 33 34test_expect_success 'cherry-pick conflict with --rerere-autoupdate' ' 35 test_must_fail git cherry-pick --rerere-autoupdate foo..bar-main && 36 test_cmp foo-expect foo && 37 git diff-files --quiet && 38 test_must_fail git cherry-pick --continue && 39 test_cmp bar-expect bar && 40 git diff-files --quiet && 41 git cherry-pick --continue && 42 git reset --hard bar-dev 43' 44 45test_expect_success 'cherry-pick conflict repsects rerere.autoUpdate' ' 46 test_config rerere.autoUpdate true && 47 test_must_fail git cherry-pick foo..bar-main && 48 test_cmp foo-expect foo && 49 git diff-files --quiet && 50 test_must_fail git cherry-pick --continue && 51 test_cmp bar-expect bar && 52 git diff-files --quiet && 53 git cherry-pick --continue && 54 git reset --hard bar-dev 55' 56 57test_expect_success 'cherry-pick conflict with --no-rerere-autoupdate' ' 58 test_config rerere.autoUpdate true && 59 test_must_fail git cherry-pick --no-rerere-autoupdate foo..bar-main && 60 test_cmp foo-expect foo && 61 test_must_fail git diff-files --quiet && 62 git add foo && 63 test_must_fail git cherry-pick --continue && 64 test_cmp bar-expect bar && 65 test_must_fail git diff-files --quiet && 66 git add bar && 67 git cherry-pick --continue && 68 git reset --hard bar-dev 69' 70 71test_expect_success 'cherry-pick --continue rejects --rerere-autoupdate' ' 72 test_must_fail git cherry-pick --rerere-autoupdate foo..bar-main && 73 test_cmp foo-expect foo && 74 git diff-files --quiet && 75 test_must_fail git cherry-pick --continue --rerere-autoupdate >actual 2>&1 && 76 echo "fatal: cherry-pick: --rerere-autoupdate cannot be used with --continue" >expect && 77 test_cmp expect actual && 78 test_must_fail git cherry-pick --continue --no-rerere-autoupdate >actual 2>&1 && 79 echo "fatal: cherry-pick: --no-rerere-autoupdate cannot be used with --continue" >expect && 80 test_cmp expect actual && 81 git cherry-pick --abort 82' 83 84test_expect_success 'cherry-pick --rerere-autoupdate more than once' ' 85 test_must_fail git cherry-pick --rerere-autoupdate --rerere-autoupdate foo..bar-main && 86 test_cmp foo-expect foo && 87 git diff-files --quiet && 88 git cherry-pick --abort && 89 test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate foo..bar-main && 90 test_cmp foo-expect foo && 91 git diff-files --quiet && 92 git cherry-pick --abort && 93 test_must_fail git cherry-pick --rerere-autoupdate --no-rerere-autoupdate foo..bar-main && 94 test_must_fail git diff-files --quiet && 95 git cherry-pick --abort 96' 97 98test_expect_success 'cherry-pick conflict without rerere' ' 99 test_config rerere.enabled false && 100 test_must_fail git cherry-pick foo-main && 101 grep ===== foo && 102 grep foo-dev foo && 103 grep foo-main foo 104' 105 106test_done 107