From: "Thomas Bachem via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Phillip Wood <phillip.wood@dunelm.org.uk>,
Patrick Steinhardt <ps@pks.im>,
Junio C Hamano <gitster@pobox.com>,
Johannes Schindelin <johannes.schindelin@gmx.de>,
Phillip Wood <phillip.wood123@gmail.com>,
Thomas Bachem <mail@thomasbachem.com>,
Thomas Bachem <mail@thomasbachem.com>
Subject: [PATCH v3 1/3] config: add git_config_append_parameter()
Date: Tue, 08 Sep 2026 10:28:04 +0000 [thread overview]
Message-ID: <70db5ad0841bb3db7538d709e0f1583aa70ae8bd.1788863286.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2217.v3.git.1788863286.gitgitgadget@gmail.com>
From: Thomas Bachem <mail@thomasbachem.com>
"git -c key=value" passes its settings on to the git commands it
spawns through the environment variable GIT_CONFIG_PARAMETERS. The
value is a space separated list of 'key'='value' pairs with both
sides single quoted, which git_config_from_parameters() reads back in
the child. The only place we write such an entry is
git_config_push_split_parameter(), and it writes straight into our
own environment.
Split the formatting out into git_config_append_parameter(), which
appends one entry to a strbuf, so that we can build such a value for
a child's environment without repeating the quoting. The sequencer
will use it in a later commit to pass settings to the commands it
spawns.
Assisted-by: Claude Fable 5.1
Signed-off-by: Thomas Bachem <mail@thomasbachem.com>
---
config.c | 20 +++++++++++++-------
config.h | 13 +++++++++++++
2 files changed, 26 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..838d1509a9 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,18 @@ 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 a "-c key=value" setting to a GIT_CONFIG_PARAMETERS value in
+ * `env`. The variable carries such settings from a git process to the
+ * git commands it spawns, as a space separated list of 'key'='value'
+ * pairs with both sides single quoted, which git_config_from_parameters()
+ * reads back. A NULL `value` appends 'key'= with nothing after the equals
+ * sign, which stands for a boolean true, like "-c key" on the command
+ * line.
+ */
+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
next prev parent reply other threads:[~2026-09-08 10:28 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 7:53 [PATCH 0/2] sequencer: leave auto maintenance to the end of a rebase Thomas Bachem via GitGitGadget
2026-09-04 7:53 ` [PATCH 1/2] sequencer: run auto maintenance once a rebase is done Thomas Bachem via GitGitGadget
2026-09-04 15:03 ` Phillip Wood
2026-09-04 7:53 ` [PATCH 2/2] sequencer: keep auto maintenance out of the commands a rebase spawns Thomas Bachem via GitGitGadget
2026-09-04 15:03 ` Phillip Wood
2026-09-04 15:55 ` Thomas Bachem
2026-09-04 15:51 ` [PATCH v2 0/3] sequencer: leave auto maintenance to the end of a sequence Thomas Bachem via GitGitGadget
2026-09-04 15:51 ` [PATCH v2 1/3] config: add git_config_append_parameter() Thomas Bachem via GitGitGadget
2026-09-07 8:14 ` Patrick Steinhardt
2026-09-07 13:24 ` Phillip Wood
2026-09-07 14:47 ` Patrick Steinhardt
2026-09-07 16:37 ` Thomas Bachem
2026-09-04 15:51 ` [PATCH v2 2/3] sequencer: run auto maintenance once a sequence is done Thomas Bachem via GitGitGadget
2026-09-07 8:14 ` Patrick Steinhardt
2026-09-07 16:35 ` Thomas Bachem
2026-09-08 5:50 ` Patrick Steinhardt
2026-09-08 7:46 ` Thomas Bachem
2026-09-07 13:25 ` Phillip Wood
2026-09-07 16:36 ` Thomas Bachem
2026-09-07 16:40 ` Phillip Wood
2026-09-04 15:51 ` [PATCH v2 3/3] sequencer: keep auto maintenance out of the commands a sequence spawns Thomas Bachem via GitGitGadget
2026-09-04 21:21 ` Junio C Hamano
2026-09-05 5:42 ` Thomas Bachem
2026-09-07 8:14 ` Patrick Steinhardt
2026-09-07 16:35 ` Thomas Bachem
2026-09-07 13:24 ` Phillip Wood
2026-09-07 16:37 ` Thomas Bachem
2026-09-08 10:28 ` [PATCH v3 0/3] sequencer: leave auto maintenance to the end of a sequence Thomas Bachem via GitGitGadget
2026-09-08 10:28 ` Thomas Bachem via GitGitGadget [this message]
2026-09-08 10:28 ` [PATCH v3 2/3] rebase, cherry-pick, revert: run auto maintenance when done Thomas Bachem via GitGitGadget
2026-09-08 10:28 ` [PATCH v3 3/3] sequencer: disable auto maintenance in spawned commands Thomas Bachem via GitGitGadget
2026-09-08 15:53 ` [PATCH v3 0/3] sequencer: leave auto maintenance to the end of a sequence Junio C Hamano
2026-09-08 19:38 ` Kristoffer Haugsbakk
2026-09-09 5:57 ` Patrick Steinhardt
2026-09-10 8:25 ` Thomas Bachem
2026-09-09 8:25 ` [PATCH v4 " Thomas Bachem via GitGitGadget
2026-09-09 8:25 ` [PATCH v4 1/3] config: add git_config_append_parameter() Thomas Bachem via GitGitGadget
2026-09-11 7:34 ` Patrick Steinhardt
2026-09-09 8:25 ` [PATCH v4 2/3] rebase, cherry-pick, revert: run auto maintenance when done Thomas Bachem via GitGitGadget
2026-09-11 7:34 ` Patrick Steinhardt
2026-09-09 8:25 ` [PATCH v4 3/3] sequencer: disable auto maintenance in spawned commands Thomas Bachem via GitGitGadget
2026-09-09 15:40 ` Phillip Wood
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=70db5ad0841bb3db7538d709e0f1583aa70ae8bd.1788863286.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=mail@thomasbachem.com \
--cc=phillip.wood123@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.