[PATCH v2 1/3] config: add git_config_append_parameter()
From: Thomas Bachem via GitGitGadget <hidden>
Date: 2026-09-04 15:51:30
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Thomas Bachem <redacted> Split the part of git_config_push_split_parameter() that formats one GIT_CONFIG_PARAMETERS entry into a helper that appends it to a strbuf, so that a caller can build a value for a child's environment without knowing the quoting. The sequencer is about to do that. Assisted-by: Claude Fable 5.1 Signed-off-by: Thomas Bachem <redacted> --- config.c | 20 +++++++++++++------- config.h | 10 ++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-)
diff --git a/config.c b/config.c
index d9019e7e6c..e0bb29b53d 100644
--- a/config.c
+++ b/config.c@@ -450,18 +450,24 @@ static int git_config_include(const char *var, const char *value, return ret; } +void git_config_append_parameter(struct strbuf *env, const char *key, + const char *value) +{ + if (env->len) + strbuf_addch(env, ' '); + sq_quote_buf(env, key); + strbuf_addch(env, '='); + if (value) + sq_quote_buf(env, value); +} + static void git_config_push_split_parameter(const char *key, const char *value) { struct strbuf env = STRBUF_INIT; const char *old = getenv(CONFIG_DATA_ENVIRONMENT); - if (old && *old) { + if (old && *old) strbuf_addstr(&env, old); - strbuf_addch(&env, ' '); - } - sq_quote_buf(&env, key); - strbuf_addch(&env, '='); - if (value) - sq_quote_buf(&env, value); + git_config_append_parameter(&env, key, value); setenv(CONFIG_DATA_ENVIRONMENT, env.buf, 1); strbuf_release(&env); }
diff --git a/config.h b/config.h
index b66dd08007..fcf48f6245 100644
--- a/config.h
+++ b/config.h@@ -22,6 +22,7 @@ */ struct object_id; +struct strbuf; /* git_config_parse_key() returns these negated: */ #define CONFIG_INVALID_KEY 1
@@ -186,6 +187,15 @@ int git_config_from_blob_oid(config_fn_t fn, const char *name, enum config_scope scope); void git_config_push_parameter(const char *text); void git_config_push_env(const char *spec); + +/* + * Append `key=value` to the GIT_CONFIG_PARAMETERS value in `env`, quoted + * the way git_config_from_parameters() reads it, so that a child can be + * given configuration on top of what this process was given. A NULL + * `value` appends a boolean entry. + */ +void git_config_append_parameter(struct strbuf *env, const char *key, + const char *value); int git_config_from_parameters(config_fn_t fn, void *data); /*
--
gitgitgadget