summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2020-12-03 00:18:07 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2020-12-03 00:18:07 -0800
commitf3e5dcd66068e38408c76b7b68a5f5112f9189b9 (patch)
treedbc4204b506306a8af5f0ceb399f092a277cc6ef
parentMerge branch 'jk/stop-pack-objects-when-fetch-is-killed' (diff)
parentRevert "submodules: fix of regression on fetching of non-init subsub-repo" (diff)
downloadtgif-f3e5dcd66068e38408c76b7b68a5f5112f9189b9.tar.xz
Merge branch 'pk/subsub-fetch-fix'
An earlier attempt to fix "git fetch --recurse-submodules" broke another use case; revert it until a better fix is found. * pk/subsub-fetch-fix: Revert "submodules: fix of regression on fetching of non-init subsub-repo"
-rw-r--r--submodule.c14
-rwxr-xr-xt/t5526-fetch-submodules.sh63
2 files changed, 10 insertions, 67 deletions
diff --git a/submodule.c b/submodule.c
index eef5204e64..b3bb59f066 100644
--- a/submodule.c
+++ b/submodule.c
@@ -499,6 +499,12 @@ void prepare_submodule_repo_env(struct strvec *out)
DEFAULT_GIT_DIR_ENVIRONMENT);
}
+static void prepare_submodule_repo_env_in_gitdir(struct strvec *out)
+{
+ prepare_submodule_repo_env_no_git_dir(out);
+ strvec_pushf(out, "%s=.", GIT_DIR_ENVIRONMENT);
+}
+
/*
* Initialize a repository struct for a submodule based on the provided 'path'.
*
@@ -1449,8 +1455,8 @@ static int get_next_submodule(struct child_process *cp,
if (task->repo) {
struct strbuf submodule_prefix = STRBUF_INIT;
child_process_init(cp);
- cp->dir = task->repo->worktree;
- prepare_submodule_repo_env(&cp->env_array);
+ cp->dir = task->repo->gitdir;
+ prepare_submodule_repo_env_in_gitdir(&cp->env_array);
cp->git_cmd = 1;
if (!spf->quiet)
strbuf_addf(err, _("Fetching submodule %s%s\n"),
@@ -1499,9 +1505,9 @@ static int get_next_submodule(struct child_process *cp,
spf->prefix, task->sub->path);
child_process_init(cp);
- prepare_submodule_repo_env(&cp->env_array);
+ prepare_submodule_repo_env_in_gitdir(&cp->env_array);
cp->git_cmd = 1;
- cp->dir = task->repo->worktree;
+ cp->dir = task->repo->gitdir;
strvec_init(&cp->args);
strvec_pushv(&cp->args, spf->args.v);
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index a7f6f9fdd6..dd8e423d25 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -719,67 +719,4 @@ test_expect_success 'fetch new submodule commit intermittently referenced by sup
)
'
-add_commit_push () {
- dir="$1"
- msg="$2"
- shift 2
- git -C "$dir" add "$@" &&
- git -C "$dir" commit -a -m "$msg" &&
- git -C "$dir" push
-}
-
-compare_refs_in_dir () {
- fail= &&
- if test "x$1" = 'x!'
- then
- fail='!' &&
- shift
- fi &&
- git -C "$1" rev-parse --verify "$2" >expect &&
- git -C "$3" rev-parse --verify "$4" >actual &&
- eval $fail test_cmp expect actual
-}
-
-
-test_expect_success 'setup nested submodule fetch test' '
- # does not depend on any previous test setups
-
- for repo in outer middle inner
- do
- (
- git init --bare $repo &&
- git clone $repo ${repo}_content &&
- echo "$repo" >"${repo}_content/file" &&
- add_commit_push ${repo}_content "initial" file
- ) || return 1
- done &&
-
- git clone outer A &&
- git -C A submodule add "$pwd/middle" &&
- git -C A/middle/ submodule add "$pwd/inner" &&
- add_commit_push A/middle/ "adding inner sub" .gitmodules inner &&
- add_commit_push A/ "adding middle sub" .gitmodules middle &&
-
- git clone outer B &&
- git -C B/ submodule update --init middle &&
-
- compare_refs_in_dir A HEAD B HEAD &&
- compare_refs_in_dir A/middle HEAD B/middle HEAD &&
- test -f B/file &&
- test -f B/middle/file &&
- ! test -f B/middle/inner/file &&
-
- echo "change on inner repo of A" >"A/middle/inner/file" &&
- add_commit_push A/middle/inner "change on inner" file &&
- add_commit_push A/middle "change on inner" inner &&
- add_commit_push A "change on inner" middle
-'
-
-test_expect_success 'fetching a superproject containing an uninitialized sub/sub project' '
- # depends on previous test for setup
-
- git -C B/ fetch &&
- compare_refs_in_dir A origin/master B origin/master
-'
-
test_done