]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t1092: test merge conflicts outside cone
authorDerrick Stolee <dstolee@microsoft.com>
Thu, 29 Jul 2021 14:52:03 +0000 (14:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Jul 2021 19:36:34 +0000 (12:36 -0700)
Conflicts can occur outside of the sparse-checkout definition, and in
that case users might try to resolve the conflicts in several ways.
Document a few of these ways in a test. Make it clear that this behavior
is not necessarily the optimal flow, since users can become confused
when Git deletes these files from the worktree in later commands.

Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1092-sparse-checkout-compatibility.sh

index 91e30d6ec2248a88b58752d30cb2f72f79ee92c9..4c3bcb349992f20514810c944130feb017b5a05d 100755 (executable)
@@ -114,6 +114,16 @@ test_expect_success 'setup' '
                git add . &&
                git commit -m "file to dir" &&
 
+               for side in left right
+               do
+                       git checkout -b merge-$side base &&
+                       echo $side >>deep/deeper2/a &&
+                       echo $side >>folder1/a &&
+                       echo $side >>folder2/a &&
+                       git add . &&
+                       git commit -m "$side" || return 1
+               done &&
+
                git checkout -b deepest base &&
                echo "updated deepest" >deep/deeper1/deepest/a &&
                git commit -a -m "update deepest" &&
@@ -482,6 +492,39 @@ test_expect_success 'merge' '
        test_all_match git rev-parse HEAD^{tree}
 '
 
+# NEEDSWORK: This test is documenting current behavior, but that
+# behavior can be confusing to users so there is desire to change it.
+# Right now, users might be using this flow to work through conflicts,
+# so any solution should present advice to users who try this sequence
+# of commands to follow whatever new method we create.
+test_expect_success 'merge with conflict outside cone' '
+       init_repos &&
+
+       test_all_match git checkout -b merge-tip merge-left &&
+       test_all_match git status --porcelain=v2 &&
+       test_all_match test_must_fail git merge -m merge merge-right &&
+       test_all_match git status --porcelain=v2 &&
+
+       # Resolve the conflict in different ways:
+       # 1. Revert to the base
+       test_all_match git checkout base -- deep/deeper2/a &&
+       test_all_match git status --porcelain=v2 &&
+
+       # 2. Add the file with conflict markers
+       test_all_match git add folder1/a &&
+       test_all_match git status --porcelain=v2 &&
+
+       # 3. Rename the file to another sparse filename and
+       #    accept conflict markers as resolved content.
+       run_on_all mv folder2/a folder2/z &&
+       test_all_match git add folder2 &&
+       test_all_match git status --porcelain=v2 &&
+
+       test_all_match git merge --continue &&
+       test_all_match git status --porcelain=v2 &&
+       test_all_match git rev-parse HEAD^{tree}
+'
+
 test_expect_success 'merge with outside renames' '
        init_repos &&