about summary refs log tree commit diff
path: root/third_party/git/t/t3502-cherry-pick-merge.sh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/t3502-cherry-pick-merge.sh')
-rwxr-xr-xthird_party/git/t/t3502-cherry-pick-merge.sh132
1 files changed, 132 insertions, 0 deletions
diff --git a/third_party/git/t/t3502-cherry-pick-merge.sh b/third_party/git/t/t3502-cherry-pick-merge.sh
new file mode 100755
index 000000000000..8b635a196d5c
--- /dev/null
+++ b/third_party/git/t/t3502-cherry-pick-merge.sh
@@ -0,0 +1,132 @@
+#!/bin/sh
+
+test_description='cherry picking and reverting a merge
+
+		b---c
+	       /   /
+	initial---a
+
+'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+	>A &&
+	>B &&
+	git add A B &&
+	git commit -m "Initial" &&
+	git tag initial &&
+	git branch side &&
+	echo new line >A &&
+	git commit -m "add line to A" A &&
+	git tag a &&
+	git checkout side &&
+	echo new line >B &&
+	git commit -m "add line to B" B &&
+	git tag b &&
+	git checkout master &&
+	git merge side &&
+	git tag c
+
+'
+
+test_expect_success 'cherry-pick -m complains of bogus numbers' '
+	# expect 129 here to distinguish between cases where
+	# there was nothing to cherry-pick
+	test_expect_code 129 git cherry-pick -m &&
+	test_expect_code 129 git cherry-pick -m foo b &&
+	test_expect_code 129 git cherry-pick -m -1 b &&
+	test_expect_code 129 git cherry-pick -m 0 b
+'
+
+test_expect_success 'cherry-pick explicit first parent of a non-merge' '
+
+	git reset --hard &&
+	git checkout a^0 &&
+	git cherry-pick -m 1 b &&
+	git diff --exit-code c --
+
+'
+
+test_expect_success 'cherry pick a merge without -m should fail' '
+
+	git reset --hard &&
+	git checkout a^0 &&
+	test_must_fail git cherry-pick c &&
+	git diff --exit-code a --
+
+'
+
+test_expect_success 'cherry pick a merge (1)' '
+
+	git reset --hard &&
+	git checkout a^0 &&
+	git cherry-pick -m 1 c &&
+	git diff --exit-code c
+
+'
+
+test_expect_success 'cherry pick a merge (2)' '
+
+	git reset --hard &&
+	git checkout b^0 &&
+	git cherry-pick -m 2 c &&
+	git diff --exit-code c
+
+'
+
+test_expect_success 'cherry pick a merge relative to nonexistent parent should fail' '
+
+	git reset --hard &&
+	git checkout b^0 &&
+	test_must_fail git cherry-pick -m 3 c
+
+'
+
+test_expect_success 'revert explicit first parent of a non-merge' '
+
+	git reset --hard &&
+	git checkout c^0 &&
+	git revert -m 1 b &&
+	git diff --exit-code a --
+
+'
+
+test_expect_success 'revert a merge without -m should fail' '
+
+	git reset --hard &&
+	git checkout c^0 &&
+	test_must_fail git revert c &&
+	git diff --exit-code c
+
+'
+
+test_expect_success 'revert a merge (1)' '
+
+	git reset --hard &&
+	git checkout c^0 &&
+	git revert -m 1 c &&
+	git diff --exit-code a --
+
+'
+
+test_expect_success 'revert a merge (2)' '
+
+	git reset --hard &&
+	git checkout c^0 &&
+	git revert -m 2 c &&
+	git diff --exit-code b --
+
+'
+
+test_expect_success 'revert a merge relative to nonexistent parent should fail' '
+
+	git reset --hard &&
+	git checkout c^0 &&
+	test_must_fail git revert -m 3 c &&
+	git diff --exit-code c
+
+'
+
+test_done