Thread (37 messages) 37 messages, 7 authors, 2022-08-04

Re: [PATCH v4] submodule merge: update conflict error message

From: Elijah Newren <hidden>
Date: 2022-07-17 02:44:42

On Fri, Jul 15, 2022 at 5:57 AM Johannes Schindelin
[off-list ref] wrote:
Hi Calvin,

On Tue, 12 Jul 2022, Calvin Wan wrote:
quoted
diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh
index 178413c22f..cc1a312661 100755
--- a/t/t6437-submodule-merge.sh
+++ b/t/t6437-submodule-merge.sh
@@ -103,8 +103,25 @@ test_expect_success 'setup for merge search' '
       echo "file-c" > file-c &&
       git add file-c &&
       git commit -m "sub-c") &&
-     git commit -a -m "c" &&
+     git commit -a -m "c")
+'
+
+test_expect_success 'merging should conflict for non fast-forward' '
+     (cd merge-search &&
+      git checkout -b test-nonforward-a b &&
+       if test "$GIT_TEST_MERGE_ALGORITHM" = ort
+       then
+             test_must_fail git merge c >actual
+       else
+             test_must_fail git merge c 2> actual
+       fi &&
+      sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
+      grep "$sub_expect" actual &&
No matter how hard I tried to stare at the code, no matter whether I
looked at `cw/submodule-merge-messages` or `seen`, I cannot see how this
`grep` could ever succeed when `GIT_TEST_MERGE_ALGORITHM=recursive`: only
the `ort` code has been taught this new trick.
Right, that's left over from an earlier version of the patch (which
did also modify merge-recursive).
quoted hunk ↗ jump to hunk
In fact, when I run this locally with
`GIT_TEST_MERGE_ALGORITHM=recursive`, it not only fails (as shown here:
https://github.com/gitgitgadget/git/runs/7349612861?check_suite_focus=true#step:4:1833
and here:
https://github.com/gitgitgadget/git/runs/7326925485?check_suite_focus=true#step:4:1820),
it also leaves no error message in `actual`.

So you probably want to move the `sub_expect` assignment and the `grep`
into the `ort` clause of the conditional above.

With this fixup, things seem to work over here:

-- snip --
diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh
index cc1a3126619..3892d0bf742 100755
--- a/t/t6437-submodule-merge.sh
+++ b/t/t6437-submodule-merge.sh
@@ -111,12 +111,12 @@ test_expect_success 'merging should conflict for non fast-forward' '
         git checkout -b test-nonforward-a b &&
          if test "$GIT_TEST_MERGE_ALGORITHM" = ort
          then
-               test_must_fail git merge c >actual
+               test_must_fail git merge c >actual &&
+               sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
+               grep "$sub_expect" actual
          else
                test_must_fail git merge c 2> actual
          fi &&
-        sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
-        grep "$sub_expect" actual &&
         git reset --hard)
 '
@@ -153,13 +153,13 @@ test_expect_success 'merging should conflict for non fast-forward (resolution ex
          git rev-parse sub-d > ../expect) &&
          if test "$GIT_TEST_MERGE_ALGORITHM" = ort
          then
-               test_must_fail git merge c >actual
+               test_must_fail git merge c >actual &&
+               sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
+               grep "$sub_expect" actual
          else
                test_must_fail git merge c 2> actual
          fi &&
         grep $(cat expect) actual > /dev/null &&
-        sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
-        grep "$sub_expect" actual &&
         git reset --hard)
 '
@@ -180,14 +180,14 @@ test_expect_success 'merging should fail for ambiguous common parent' '
         ) &&
         if test "$GIT_TEST_MERGE_ALGORITHM" = ort
         then
-               test_must_fail git merge c >actual
+               test_must_fail git merge c >actual &&
+               sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
+               grep "$sub_expect" actual
         else
                test_must_fail git merge c 2> actual
         fi &&
        grep $(cat expect1) actual > /dev/null &&
        grep $(cat expect2) actual > /dev/null &&
-       sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" &&
-       grep "$sub_expect" actual &&
        git reset --hard)
 '
@@ -227,8 +227,11 @@ test_expect_success 'merging should fail for changes that are backwards' '

        git checkout -b test-backward e &&
        test_must_fail git merge f >actual &&
-       sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-d)" &&
-       grep "$sub_expect" actual)
+       if test "$GIT_TEST_MERGE_ALGORITHM" = ort
+       then
+               sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-d)" &&
+               grep "$sub_expect" actual
+       fi)
 '

-- snap --
Yeah, this looks good, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help