Thread (12 messages) flat view 12 messages, 4 authors, 7h ago
HOTtoday

[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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help