Skip to content

Commit 4c10c31

Browse files
committed
Merge branch 'jc/submodule-anchor-git-dir' into maint
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()
2 parents 79b51eb + 10f5c52 commit 4c10c31

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

submodule.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,4 +1160,5 @@ void prepare_submodule_repo_env(struct argv_array *out)
11601160
if (strcmp(*var, CONFIG_DATA_ENVIRONMENT))
11611161
argv_array_push(out, *var);
11621162
}
1163+
argv_array_push(out, "GIT_DIR=.git");
11631164
}

t/t5526-fetch-submodules.sh

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,4 +485,39 @@ test_expect_success 'fetching submodules respects parallel settings' '
485485
)
486486
'
487487

488+
test_expect_success 'fetching submodule into a broken repository' '
489+
# Prepare src and src/sub nested in it
490+
git init src &&
491+
(
492+
cd src &&
493+
git init sub &&
494+
git -C sub commit --allow-empty -m "initial in sub" &&
495+
git submodule add -- ./sub sub &&
496+
git commit -m "initial in top"
497+
) &&
498+
499+
# Clone the old-fashoned way
500+
git clone src dst &&
501+
git -C dst clone ../src/sub sub &&
502+
503+
# Make sure that old-fashoned layout is still supported
504+
git -C dst status &&
505+
506+
# "diff" would find no change
507+
git -C dst diff --exit-code &&
508+
509+
# Recursive-fetch works fine
510+
git -C dst fetch --recurse-submodules &&
511+
512+
# Break the receiving submodule
513+
rm -f dst/sub/.git/HEAD &&
514+
515+
# NOTE: without the fix the following tests will recurse forever!
516+
# They should terminate with an error.
517+
518+
test_must_fail git -C dst status &&
519+
test_must_fail git -C dst diff &&
520+
test_must_fail git -C dst fetch --recurse-submodules
521+
'
522+
488523
test_done

0 commit comments

Comments
 (0)