aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerrick Stolee <stolee@gmail.com>2026-03-03 17:31:52 +0000
committerJunio C Hamano <gitster@pobox.com>2026-03-03 10:19:59 -0800
commit5f031fe4f14b5cc754daaf24534dbe0c6647fcca (patch)
treeabc978b5a5a6fc12ac178c1b9e996d1531f0c305
parentc5e62e1aa07c7436cb081c7ef3a6995578f38b27 (diff)
downloadgit-5f031fe4f14b5cc754daaf24534dbe0c6647fcca.tar.xz
run-command: extract sanitize_repo_env helper
The current prepare_other_repo_env() does two distinct things: 1. Strip certain known environment variables that should be set by a child process based on a different repository. 2. Set the GIT_DIR variable to avoid repository discovery. The second item is valuable for child processes that operate on submodules, where the repo discovery could be mistaken for the parent repository. In the next change, we will see an important case where only the first item is required as the GIT_DIR discovery should happen naturally from the '-C' parameter in the child process. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--run-command.c7
-rw-r--r--run-command.h15
2 files changed, 16 insertions, 6 deletions
diff --git a/run-command.c b/run-command.c
index e3e02475cc..89dbe62ab8 100644
--- a/run-command.c
+++ b/run-command.c
@@ -1847,7 +1847,7 @@ int run_auto_maintenance(int quiet)
return run_command(&maint);
}
-void prepare_other_repo_env(struct strvec *env, const char *new_git_dir)
+void sanitize_repo_env(struct strvec *env)
{
const char * const *var;
@@ -1856,6 +1856,11 @@ void prepare_other_repo_env(struct strvec *env, const char *new_git_dir)
strcmp(*var, CONFIG_COUNT_ENVIRONMENT))
strvec_push(env, *var);
}
+}
+
+void prepare_other_repo_env(struct strvec *env, const char *new_git_dir)
+{
+ sanitize_repo_env(env);
strvec_pushf(env, "%s=%s", GIT_DIR_ENVIRONMENT, new_git_dir);
}
diff --git a/run-command.h b/run-command.h
index 0df25e445f..7e5a263ee6 100644
--- a/run-command.h
+++ b/run-command.h
@@ -510,12 +510,17 @@ struct run_process_parallel_opts
void run_processes_parallel(const struct run_process_parallel_opts *opts);
/**
+ * Unset all local-repo GIT_* variables in env; see local_repo_env in
+ * environment.h. GIT_CONFIG_PARAMETERS and GIT_CONFIG_COUNT are preserved
+ * to pass -c and --config-env options from the parent process.
+ */
+void sanitize_repo_env(struct strvec *env);
+
+/**
* Convenience function which prepares env for a command to be run in a
- * new repo. This adds all GIT_* environment variables to env with the
- * exception of GIT_CONFIG_PARAMETERS and GIT_CONFIG_COUNT (which cause the
- * corresponding environment variables to be unset in the subprocess) and adds
- * an environment variable pointing to new_git_dir. See local_repo_env in
- * environment.h for more information.
+ * new repo. This removes variables pointing to the local repository (using
+ * sanitize_repo_env() above), and adds an environment variable pointing to
+ * new_git_dir.
*/
void prepare_other_repo_env(struct strvec *env, const char *new_git_dir);