diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-12-03 00:18:07 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-12-03 00:18:07 -0800 |
commit | f3e5dcd66068e38408c76b7b68a5f5112f9189b9 (patch) | |
tree | dbc4204b506306a8af5f0ceb399f092a277cc6ef | |
parent | Merge branch 'jk/stop-pack-objects-when-fetch-is-killed' (diff) | |
parent | Revert "submodules: fix of regression on fetching of non-init subsub-repo" (diff) | |
download | tgif-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.c | 14 | ||||
-rwxr-xr-x | t/t5526-fetch-submodules.sh | 63 |
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 |