submodule: properly recurse for read-tree and checkout

We forgot to prepare the submodule env, which is only a problem for
nested submodules. See 2e5d6503bd (ls-files: fix recurse-submodules
with nested submodules, 2017-04-13) for further explanation.

To come up with a proper test for this, we'd need to look at nested
submodules just as in that given commit. It turns out we're lucky
and these tests already exist, but are marked as failing. We need
to pass `--recurse-submodules` to read-tree additionally to make
these tests pass. Passing that flag alone would not make the tests
pass, such that this covers testing for the bug fix of the submodule
env as well.

Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stefan Beller 2017-05-02 12:32:14 -07:00 committed by Junio C Hamano
parent da27bc81f0
commit 218c883783
4 changed files with 3 additions and 9 deletions

View File

@ -1446,7 +1446,7 @@ int submodule_move_head(const char *path,
argv_array_pushf(&cp.args, "--super-prefix=%s%s/", argv_array_pushf(&cp.args, "--super-prefix=%s%s/",
get_super_prefix_or_empty(), path); get_super_prefix_or_empty(), path);
argv_array_pushl(&cp.args, "read-tree", NULL); argv_array_pushl(&cp.args, "read-tree", "--recurse-submodules", NULL);
if (flags & SUBMODULE_MOVE_HEAD_DRY_RUN) if (flags & SUBMODULE_MOVE_HEAD_DRY_RUN)
argv_array_push(&cp.args, "-n"); argv_array_push(&cp.args, "-n");
@ -1474,6 +1474,7 @@ int submodule_move_head(const char *path,
cp.no_stdin = 1; cp.no_stdin = 1;
cp.dir = path; cp.dir = path;
prepare_submodule_repo_env(&cp.env_array);
argv_array_pushl(&cp.args, "update-ref", "HEAD", new, NULL); argv_array_pushl(&cp.args, "update-ref", "HEAD", new, NULL);
if (run_command(&cp)) { if (run_command(&cp)) {

View File

@ -787,11 +787,6 @@ test_submodule_switch_recursing () {
then then
RESULTDS=failure RESULTDS=failure
fi fi
RESULTR=success
if test "$KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED" = 1
then
RESULTR=failure
fi
RESULTOI=success RESULTOI=success
if test "$KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED" = 1 if test "$KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED" = 1
then then
@ -1003,7 +998,7 @@ test_submodule_switch_recursing () {
' '
# recursing deeper than one level doesn't work yet. # recursing deeper than one level doesn't work yet.
test_expect_$RESULTR "$command: modified submodule updates submodule recursively" ' test_expect_success "$command: modified submodule updates submodule recursively" '
prolog && prolog &&
reset_work_tree_to_interested add_nested_sub && reset_work_tree_to_interested add_nested_sub &&
( (

View File

@ -5,7 +5,6 @@ test_description='read-tree can handle submodules'
. ./test-lib.sh . ./test-lib.sh
. "$TEST_DIRECTORY"/lib-submodule-update.sh . "$TEST_DIRECTORY"/lib-submodule-update.sh
KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED=1
KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1 KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED=1 KNOWN_FAILURE_SUBMODULE_OVERWRITE_IGNORED_UNTRACKED=1

View File

@ -64,7 +64,6 @@ test_expect_success '"checkout <submodule>" honors submodule.*.ignore from .git/
' '
KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1 KNOWN_FAILURE_DIRECTORY_SUBMODULE_CONFLICTS=1
KNOWN_FAILURE_SUBMODULE_RECURSIVE_NESTED=1
test_submodule_switch_recursing "git checkout --recurse-submodules" test_submodule_switch_recursing "git checkout --recurse-submodules"
test_submodule_forced_switch_recursing "git checkout -f --recurse-submodules" test_submodule_forced_switch_recursing "git checkout -f --recurse-submodules"