cherry-pick/revert: add --skip option
[gitweb.git] / t / t3507-cherry-pick-conflict.sh
index a584b11c9871c82b5b771cd1858b3d34d8ea8b33..9b9b4ca8d4f2a2188c206a0e1e2de763d00a1ab6 100755 (executable)
@@ -25,6 +25,11 @@ test_expect_success setup '
        test_commit base foo b &&
        test_commit picked foo c &&
        test_commit --signoff picked-signed foo d &&
+       git checkout -b topic initial &&
+       test_commit redundant-pick foo c redundant &&
+       git commit --allow-empty --allow-empty-message &&
+       git tag empty &&
+       git checkout master &&
        git config advice.detachedhead false
 
 '
@@ -156,6 +161,25 @@ test_expect_success 'successful commit clears CHERRY_PICK_HEAD' '
 
        test_must_fail git rev-parse --verify CHERRY_PICK_HEAD
 '
+test_expect_success 'successful final commit clears cherry-pick state' '
+       pristine_detach initial &&
+
+       test_must_fail git cherry-pick base picked-signed &&
+       echo resolved >foo &&
+       test_path_is_file .git/sequencer/todo &&
+       git commit -a &&
+       test_must_fail test_path_exists .git/sequencer
+'
+
+test_expect_success 'reset after final pick clears cherry-pick state' '
+       pristine_detach initial &&
+
+       test_must_fail git cherry-pick base picked-signed &&
+       echo resolved >foo &&
+       test_path_is_file .git/sequencer/todo &&
+       git reset &&
+       test_must_fail test_path_exists .git/sequencer
+'
 
 test_expect_success 'failed cherry-pick produces dirty index' '
        pristine_detach initial &&
@@ -356,6 +380,26 @@ test_expect_success 'failed commit does not clear REVERT_HEAD' '
        test_cmp_rev picked REVERT_HEAD
 '
 
+test_expect_success 'successful final commit clears revert state' '
+       pristine_detach picked-signed &&
+
+       test_must_fail git revert picked-signed base &&
+       echo resolved >foo &&
+       test_path_is_file .git/sequencer/todo &&
+       git commit -a &&
+       test_must_fail test_path_exists .git/sequencer
+'
+
+test_expect_success 'reset after final pick clears revert state' '
+       pristine_detach picked-signed &&
+
+       test_must_fail git revert picked-signed base &&
+       echo resolved >foo &&
+       test_path_is_file .git/sequencer/todo &&
+       git reset &&
+       test_must_fail test_path_exists .git/sequencer
+'
+
 test_expect_success 'revert conflict, diff3 -m style' '
        pristine_detach initial &&
        git config merge.conflictstyle diff3 &&
@@ -491,4 +535,23 @@ test_expect_success 'cherry-pick preserves sparse-checkout' '
        test_i18ngrep ! "Changes not staged for commit:" actual
 '
 
+test_expect_success 'cherry-pick --continue remembers --keep-redundant-commits' '
+       test_when_finished "git cherry-pick --abort || :" &&
+       pristine_detach initial &&
+       test_must_fail git cherry-pick --keep-redundant-commits picked redundant &&
+       echo c >foo &&
+       git add foo &&
+       git cherry-pick --continue
+'
+
+test_expect_success 'cherry-pick --continue remembers --allow-empty and --allow-empty-message' '
+       test_when_finished "git cherry-pick --abort || :" &&
+       pristine_detach initial &&
+       test_must_fail git cherry-pick --allow-empty --allow-empty-message \
+                                      picked empty &&
+       echo c >foo &&
+       git add foo &&
+       git cherry-pick --continue
+'
+
 test_done