From: Junio C Hamano Date: Tue, 25 Nov 2025 22:03:56 GMT Subject: Re: [BUG] `git clone '-c KEY=VALUE'` no longer works Message-ID: In-Reply-To: Junio C Hamano writes: > The right right thing to do at this point may be to fix the > regression and at the same time mark the "feature" as deprecated, > and remove it following the usual deprecation procedure, but that > certainly sounds like an unnecessary waste of engineering effort. > > So, I dunno. The first step of the "right right thing" may look something like this. As this thread analyzed so far, this awkward lenience exists only in "clone -c =" in that the keyname is trimmed, so isolating the damage within the clone's code path would be the right approach, if we want to keep this awkward lenience alive a little bit longer. This function receives the string_list that accumulated the "-c" and "--config " command line parameters (plus some internally generated ones related to submodules) and feeds them one at a time to git_config_parse_parameter() that expects the = pair to be fed. builtin/clone.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git c/builtin/clone.c w/builtin/clone.c index c990f398ef..4ea8c92a6b 100644 --- c/builtin/clone.c +++ w/builtin/clone.c @@ -779,7 +779,26 @@ static void write_config(struct string_list *config) int i; for (i = 0; i < config->nr; i++) { - if (git_config_parse_parameter(config->items[i].string, + /* + * NEEDSWORK: a backward compatibility wart that made + * us tolerate (note the leading whitespace before + * the variable name) + * + * $ git clone '-c foo.bar=baz' + * + * and treated as if the leading whitespace before the + * variable name did not exist. Apparently a third + * party tool "Bamboo" relies on this past stupidity + * of ours. + * + * Eventually we should deprecate and remove this. + */ + const char *trimleft = config->items[i].string; + + while (*trimleft && isspace(*trimleft)) + trimleft++; + + if (git_config_parse_parameter(trimleft, write_one_config, NULL) < 0) die(_("unable to write parameters to config file")); }