merge: add t7613 for submodule updates
authorJens Lehmann <Jens.Lehmann@web.de>
Sun, 15 Jun 2014 17:01:41 +0000 (19:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 14 Jul 2014 19:06:15 +0000 (12:06 -0700)
Test that the merge command updates the work tree as expected (for
submodule changes which don't result in conflicts) when used without
arguments or with the '--ff', '--ff-only' and '--no-ff' flag.

Implement the KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR
switch to expect the known failure that --no-ff merges do not create the
empty submodule directory.

The KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES
switch is also implemented to expect the known failure that --no-ff
merges attempt to merge the new files in the former submodule directory
with those of the removed submodule.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/lib-submodule-update.sh
t/t7613-merge-submodule.sh [new file with mode: 0755]
index f2e58eb904574090ca4a16f4a8b52de5b9fa0f5a..759dbe614c35a44af652c0b59e49f27715831144 100755 (executable)
@@ -285,7 +285,16 @@ test_submodule_switch () {
        '
        # ... as does removing a directory with tracked files with a
        # submodule.
-       test_expect_success "$command: replace directory with submodule" '
+       if test "$KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR" = 1
+       then
+               # Non fast-forward merges fail with "Directory sub1 doesn't
+               # exist. sub1" because the empty submodule directory is not
+               # created
+               RESULT="failure"
+       else
+               RESULT="success"
+       fi
+       test_expect_$RESULT "$command: replace directory with submodule" '
                prolog &&
                reset_work_tree_to replace_sub1_with_directory &&
                (
@@ -328,7 +337,16 @@ test_submodule_switch () {
        '
        # Replacing a submodule with files in a directory must fail as the
        # submodule work tree isn't removed ...
-       test_expect_success "$command: replace submodule with a directory must fail" '
+       if test "$KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES" = 1
+       then
+               # Non fast-forward merges attempt to merge the former
+               # submodule files with the newly checked out ones in the
+               # directory of the same name while it shouldn't.
+               RESULT="failure"
+       else
+               RESULT="success"
+       fi
+       test_expect_$RESULT "$command: replace submodule with a directory must fail" '
                prolog &&
                reset_work_tree_to add_sub1 &&
                (
@@ -340,7 +358,7 @@ test_submodule_switch () {
                )
        '
        # ... especially when it contains a .git directory.
-       test_expect_success "$command: replace submodule containing a .git directory with a directory must fail" '
+       test_expect_$RESULT "$command: replace submodule containing a .git directory with a directory must fail" '
                prolog &&
                reset_work_tree_to add_sub1 &&
                (
diff --git a/t/t7613-merge-submodule.sh b/t/t7613-merge-submodule.sh
new file mode 100755 (executable)
index 0000000..d1e9fcc
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+test_description='merge can handle submodules'
+
+. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-submodule-update.sh
+
+# merges without conflicts
+test_submodule_switch "git merge"
+
+test_submodule_switch "git merge --ff"
+
+test_submodule_switch "git merge --ff-only"
+
+KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
+KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
+test_submodule_switch "git merge --no-ff"
+
+test_done