submodule update: continue when a checkout fails
[gitweb.git] / t / t3508-cherry-pick-many-commits.sh
index 3b87efe3adffc025275ff5ad5ee4cd8251a39522..8e09fd0319c95cbd4d30c461f00fee5f52e27cbd 100755 (executable)
@@ -4,6 +4,18 @@ test_description='test cherry-picking many commits'
 
 . ./test-lib.sh
 
+check_head_differs_from() {
+       head=$(git rev-parse --verify HEAD) &&
+       arg=$(git rev-parse --verify "$1") &&
+       test "$head" != "$arg"
+}
+
+check_head_equals() {
+       head=$(git rev-parse --verify HEAD) &&
+       arg=$(git rev-parse --verify "$1") &&
+       test "$head" = "$arg"
+}
+
 test_expect_success setup '
        echo first > file1 &&
        git add file1 &&
@@ -23,27 +35,69 @@ test_expect_success setup '
 '
 
 test_expect_success 'cherry-pick first..fourth works' '
-       git checkout master &&
+       cat <<-\EOF >expected &&
+       [master OBJID] second
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       [master OBJID] third
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       [master OBJID] fourth
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       EOF
+
+       git checkout -f master &&
        git reset --hard first &&
        test_tick &&
-       git cherry-pick first..fourth &&
+       git cherry-pick first..fourth >actual &&
        git diff --quiet other &&
        git diff --quiet HEAD other &&
-       test "$(git rev-parse --verify HEAD)" != "$(git rev-parse --verify fourth)"
+
+       sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
+       test_cmp expected actual.fuzzy &&
+       check_head_differs_from fourth
+'
+
+test_expect_success 'cherry-pick --strategy resolve first..fourth works' '
+       cat <<-\EOF >expected &&
+       Trying simple merge.
+       [master OBJID] second
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       Trying simple merge.
+       [master OBJID] third
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       Trying simple merge.
+       [master OBJID] fourth
+        Author: A U Thor <author@example.com>
+        1 files changed, 1 insertions(+), 0 deletions(-)
+       EOF
+
+       git checkout -f master &&
+       git reset --hard first &&
+       test_tick &&
+       git cherry-pick --strategy resolve first..fourth >actual &&
+       git diff --quiet other &&
+       git diff --quiet HEAD other &&
+       sed -e "s/$_x05[0-9a-f][0-9a-f]/OBJID/" <actual >actual.fuzzy &&
+       test_cmp expected actual.fuzzy &&
+       check_head_differs_from fourth
 '
 
 test_expect_success 'cherry-pick --ff first..fourth works' '
-       git checkout master &&
+       git checkout -f master &&
        git reset --hard first &&
        test_tick &&
        git cherry-pick --ff first..fourth &&
        git diff --quiet other &&
        git diff --quiet HEAD other &&
-       test "$(git rev-parse --verify HEAD)" = "$(git rev-parse --verify fourth)"
+       check_head_equals fourth
 '
 
 test_expect_success 'cherry-pick -n first..fourth works' '
-       git checkout master &&
+       git checkout -f master &&
        git reset --hard first &&
        test_tick &&
        git cherry-pick -n first..fourth &&
@@ -53,7 +107,7 @@ test_expect_success 'cherry-pick -n first..fourth works' '
 '
 
 test_expect_success 'revert first..fourth works' '
-       git checkout master &&
+       git checkout -f master &&
        git reset --hard fourth &&
        test_tick &&
        git revert first..fourth &&
@@ -63,7 +117,7 @@ test_expect_success 'revert first..fourth works' '
 '
 
 test_expect_success 'revert ^first fourth works' '
-       git checkout master &&
+       git checkout -f master &&
        git reset --hard fourth &&
        test_tick &&
        git revert ^first fourth &&
@@ -73,7 +127,7 @@ test_expect_success 'revert ^first fourth works' '
 '
 
 test_expect_success 'revert fourth fourth~1 fourth~2 works' '
-       git checkout master &&
+       git checkout -f master &&
        git reset --hard fourth &&
        test_tick &&
        git revert fourth fourth~1 fourth~2 &&
@@ -82,14 +136,24 @@ test_expect_success 'revert fourth fourth~1 fourth~2 works' '
        git diff --quiet HEAD first
 '
 
-test_expect_failure 'cherry-pick -3 fourth works' '
-       git checkout master &&
+test_expect_success 'cherry-pick -3 fourth works' '
+       git checkout -f master &&
        git reset --hard first &&
        test_tick &&
        git cherry-pick -3 fourth &&
        git diff --quiet other &&
        git diff --quiet HEAD other &&
-       test "$(git rev-parse --verify HEAD)" != "$(git rev-parse --verify fourth)"
+       check_head_differs_from fourth
+'
+
+test_expect_success 'cherry-pick --stdin works' '
+       git checkout -f master &&
+       git reset --hard first &&
+       test_tick &&
+       git rev-list --reverse first..fourth | git cherry-pick --stdin &&
+       git diff --quiet other &&
+       git diff --quiet HEAD other &&
+       check_head_differs_from fourth
 '
 
 test_done