Imported Upstream version 2.9.4
[platform/upstream/git.git] / t / t3505-cherry-pick-empty.sh
index c10b28c..fbdc47c 100755 (executable)
@@ -18,34 +18,84 @@ test_expect_success setup '
        echo third >> file1 &&
        git add file1 &&
        test_tick &&
-       git commit --allow-empty-message -m ""
+       git commit --allow-empty-message -m "" &&
+
+       git checkout master &&
+       git checkout -b empty-branch2 &&
+       test_tick &&
+       git commit --allow-empty -m "empty"
 
 '
 
 test_expect_success 'cherry-pick an empty commit' '
-       git checkout master && {
-               git cherry-pick empty-branch^
-               test "$?" = 1
-       }
+       git checkout master &&
+       test_expect_code 1 git cherry-pick empty-branch^
 '
 
 test_expect_success 'index lockfile was removed' '
-
        test ! -f .git/index.lock
-
 '
 
 test_expect_success 'cherry-pick a commit with an empty message' '
-       git checkout master && {
-               git cherry-pick empty-branch
-               test "$?" = 1
-       }
+       git checkout master &&
+       test_expect_code 1 git cherry-pick empty-branch
 '
 
 test_expect_success 'index lockfile was removed' '
-
        test ! -f .git/index.lock
+'
+
+test_expect_success 'cherry-pick a commit with an empty message with --allow-empty-message' '
+       git checkout -f master &&
+       git cherry-pick --allow-empty-message empty-branch
+'
+
+test_expect_success 'cherry pick an empty non-ff commit without --allow-empty' '
+       git checkout master &&
+       echo fourth >>file2 &&
+       git add file2 &&
+       git commit -m "fourth" &&
+       test_must_fail git cherry-pick empty-branch2
+'
+
+test_expect_success 'cherry pick an empty non-ff commit with --allow-empty' '
+       git checkout master &&
+       git cherry-pick --allow-empty empty-branch2
+'
+
+test_expect_success 'cherry pick with --keep-redundant-commits' '
+       git checkout master &&
+       git cherry-pick --keep-redundant-commits HEAD^
+'
+
+test_expect_success 'cherry-pick a commit that becomes no-op (prep)' '
+       git checkout master &&
+       git branch fork &&
+       echo foo >file2 &&
+       git add file2 &&
+       test_tick &&
+       git commit -m "add file2 on master" &&
+
+       git checkout fork &&
+       echo foo >file2 &&
+       git add file2 &&
+       test_tick &&
+       git commit -m "add file2 on the side"
+'
+
+test_expect_success 'cherry-pick a no-op without --keep-redundant' '
+       git reset --hard &&
+       git checkout fork^0 &&
+       test_must_fail git cherry-pick master
+'
 
+test_expect_success 'cherry-pick a no-op with --keep-redundant' '
+       git reset --hard &&
+       git checkout fork^0 &&
+       git cherry-pick --keep-redundant-commits master &&
+       git show -s --format=%s >actual &&
+       echo "add file2 on master" >expect &&
+       test_cmp expect actual
 '
 
 test_done