diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-09-12 15:34:34 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-09-12 15:34:34 -0700 |
commit | 293c232ab1dcfa08d650fa9c21377b1ef7b447dc (patch) | |
tree | f637793399e0a9113e44d70ece105316a4613e0d | |
parent | Merge branch 'jk/squelch-false-warning-from-gcc-o3' (diff) | |
parent | submodule: avoid auto-discovery in prepare_submodule_repo_env() (diff) | |
download | tgif-293c232ab1dcfa08d650fa9c21377b1ef7b447dc.tar.xz |
Merge branch 'jc/submodule-anchor-git-dir'
Having a submodule whose ".git" repository is somehow corrupt
caused a few commands that recurse into submodules loop forever.
* jc/submodule-anchor-git-dir:
submodule: avoid auto-discovery in prepare_submodule_repo_env()
-rw-r--r-- | submodule.c | 1 | ||||
-rwxr-xr-x | t/t5526-fetch-submodules.sh | 35 |
2 files changed, 36 insertions, 0 deletions
diff --git a/submodule.c b/submodule.c index 5a62aa2960..0ef2ff4321 100644 --- a/submodule.c +++ b/submodule.c @@ -1280,4 +1280,5 @@ void prepare_submodule_repo_env(struct argv_array *out) if (strcmp(*var, CONFIG_DATA_ENVIRONMENT)) argv_array_push(out, *var); } + argv_array_push(out, "GIT_DIR=.git"); } diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh index 954d0e43f5..f3b0a8d30a 100755 --- a/t/t5526-fetch-submodules.sh +++ b/t/t5526-fetch-submodules.sh @@ -485,4 +485,39 @@ test_expect_success 'fetching submodules respects parallel settings' ' ) ' +test_expect_success 'fetching submodule into a broken repository' ' + # Prepare src and src/sub nested in it + git init src && + ( + cd src && + git init sub && + git -C sub commit --allow-empty -m "initial in sub" && + git submodule add -- ./sub sub && + git commit -m "initial in top" + ) && + + # Clone the old-fashoned way + git clone src dst && + git -C dst clone ../src/sub sub && + + # Make sure that old-fashoned layout is still supported + git -C dst status && + + # "diff" would find no change + git -C dst diff --exit-code && + + # Recursive-fetch works fine + git -C dst fetch --recurse-submodules && + + # Break the receiving submodule + rm -f dst/sub/.git/HEAD && + + # NOTE: without the fix the following tests will recurse forever! + # They should terminate with an error. + + test_must_fail git -C dst status && + test_must_fail git -C dst diff && + test_must_fail git -C dst fetch --recurse-submodules +' + test_done |