submodule: use prepare_submodule_repo_env consistently
Before 14111fc
(git: submodule honor -c credential.* from
command line, 2016-02-29), it was sufficient for code which
spawned a process in a submodule to just set the child
process's "env" field to "local_repo_env" to clear the
environment of any repo-specific variables.
That commit introduced a more complicated procedure, in
which we clear most variables but allow through sanitized
config. For C code, we used that procedure only for cloning,
but not for any of the programs spawned by submodule.c. As a
result, things like "git fetch --recurse-submodules" behave
differently than "git clone --recursive"; the former will
not pass through the sanitized config.
We can fix this by using prepare_submodule_repo_env()
everywhere in submodule.c.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4638728c63
commit
c12e865670
14
submodule.c
14
submodule.c
@ -367,7 +367,7 @@ static int submodule_needs_pushing(const char *path, const unsigned char sha1[20
|
|||||||
|
|
||||||
argv[1] = sha1_to_hex(sha1);
|
argv[1] = sha1_to_hex(sha1);
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
@ -454,7 +454,7 @@ static int push_submodule(const char *path)
|
|||||||
const char *argv[] = {"push", NULL};
|
const char *argv[] = {"push", NULL};
|
||||||
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.dir = path;
|
cp.dir = path;
|
||||||
@ -500,7 +500,7 @@ static int is_submodule_commit_present(const char *path, unsigned char sha1[20])
|
|||||||
|
|
||||||
argv[3] = sha1_to_hex(sha1);
|
argv[3] = sha1_to_hex(sha1);
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.dir = path;
|
cp.dir = path;
|
||||||
@ -683,7 +683,7 @@ static int get_next_submodule(struct child_process *cp,
|
|||||||
if (is_directory(git_dir)) {
|
if (is_directory(git_dir)) {
|
||||||
child_process_init(cp);
|
child_process_init(cp);
|
||||||
cp->dir = strbuf_detach(&submodule_path, NULL);
|
cp->dir = strbuf_detach(&submodule_path, NULL);
|
||||||
cp->env = local_repo_env;
|
prepare_submodule_repo_env(&cp->env_array);
|
||||||
cp->git_cmd = 1;
|
cp->git_cmd = 1;
|
||||||
if (!spf->quiet)
|
if (!spf->quiet)
|
||||||
strbuf_addf(err, "Fetching submodule %s%s\n",
|
strbuf_addf(err, "Fetching submodule %s%s\n",
|
||||||
@ -796,7 +796,7 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
|
|||||||
argv[2] = "-uno";
|
argv[2] = "-uno";
|
||||||
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
@ -857,7 +857,7 @@ int submodule_uses_gitfile(const char *path)
|
|||||||
|
|
||||||
/* Now test that all nested submodules use a gitfile too */
|
/* Now test that all nested submodules use a gitfile too */
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.no_stderr = 1;
|
cp.no_stderr = 1;
|
||||||
@ -890,7 +890,7 @@ int ok_to_remove_submodule(const char *path)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cp.argv = argv;
|
cp.argv = argv;
|
||||||
cp.env = local_repo_env;
|
prepare_submodule_repo_env(&cp.env_array);
|
||||||
cp.git_cmd = 1;
|
cp.git_cmd = 1;
|
||||||
cp.no_stdin = 1;
|
cp.no_stdin = 1;
|
||||||
cp.out = -1;
|
cp.out = -1;
|
||||||
|
@ -112,6 +112,17 @@ test_expect_success 'cmdline credential config passes to submodule via clone' '
|
|||||||
expect_askpass pass user@host
|
expect_askpass pass user@host
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'cmdline credential config passes submodule via fetch' '
|
||||||
|
set_askpass wrong pass@host &&
|
||||||
|
test_must_fail git -C super-clone fetch --recurse-submodules &&
|
||||||
|
|
||||||
|
set_askpass wrong pass@host &&
|
||||||
|
git -C super-clone \
|
||||||
|
-c "credential.$HTTPD_URL.username=user@host" \
|
||||||
|
fetch --recurse-submodules &&
|
||||||
|
expect_askpass pass user@host
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'cmdline credential config passes submodule update' '
|
test_expect_success 'cmdline credential config passes submodule update' '
|
||||||
# advance the submodule HEAD so that a fetch is required
|
# advance the submodule HEAD so that a fetch is required
|
||||||
git commit --allow-empty -m foo &&
|
git commit --allow-empty -m foo &&
|
||||||
|
Loading…
Reference in New Issue
Block a user