git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] clone: handle empty config values in -c

From
BWBrandon Williams <bmwill@google.com>
Date
May 2, 2017, 00:08 UTC
Message-ID
<20170502000856.GI39135@google.com>
In-Reply-To
<20170502000515.GU28740@aiede.svl.corp.google.com>
On 05/01, Jonathan Nieder wrote:
Show 29 quoted lines
> "git clone --config" uses the following incantation to add an item to
> a config file, instead of replacing an existing value:
> 
> 	git_config_set_multivar_gently(key, value, "^$", 0)
> 
> As long as no existing value matches the regex ^$, that works as
> intended and adds to the config.  When a value is empty, though, it
> replaces the existing value.
> 
> Noticed while trying to set credential.helper during a clone to use a
> specific helper without inheriting from ~/.gitconfig and
> /etc/gitconfig.  That is, I ran
> 
> 	git clone -c credential.helper= \
> 		-c credential.helper=myhelper \
> 		https://example.com/repo
> 
> intending to produce the configuration
> 
> 	[credential]
> 		helper =
> 		helper = myhelper
> 
> Without this patch, the 'helper =' line is not included and the
> credential helper from /etc/gitconfig gets used.
> 
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> ---
> Thoughts?

After reading this I'm still a little fuzzy on why the empty helper line is needed to avoid using the credential helper from /etc/gitconfig.

Show 45 quoted lines
> 
> Thanks,
> Jonathan
> 
>  builtin/clone.c         | 4 +++-
>  t/t5611-clone-config.sh | 8 ++++++++
>  2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/builtin/clone.c b/builtin/clone.c
> index de85b85254..a6ae7d6180 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -773,7 +773,9 @@ static int checkout(int submodule_progress)
>  
>  static int write_one_config(const char *key, const char *value, void *data)
>  {
> -	return git_config_set_multivar_gently(key, value ? value : "true", "^$", 0);
> +	return git_config_set_multivar_gently(key,
> +					      value ? value : "true",
> +					      CONFIG_REGEX_NONE, 0);
>  }
>  
>  static void write_config(struct string_list *config)
> diff --git a/t/t5611-clone-config.sh b/t/t5611-clone-config.sh
> index e4850b778c..39329eb7a8 100755
> --- a/t/t5611-clone-config.sh
> +++ b/t/t5611-clone-config.sh
> @@ -19,6 +19,14 @@ test_expect_success 'clone -c can set multi-keys' '
>  	test_cmp expect actual
>  '
>  
> +test_expect_success 'clone -c can set multi-keys, including some empty' '
> +	rm -rf child &&
> +	git clone -c credential.helper= -c credential.helper=hi . child &&
> +	printf "%s\n" "" hi >expect &&
> +	git --git-dir=child/.git config --get-all credential.helper >actual &&
> +	test_cmp expect actual
> +'
> +
>  test_expect_success 'clone -c without a value is boolean true' '
>  	rm -rf child &&
>  	git clone -c core.foo . child &&
> -- 
> 2.13.0.rc1.294.g07d810a77f
> 
-- 
Brandon Williams
Previous: Jonathan NiederNext: Jonathan Nieder
Message 2 of 8 in “clone: handle empty config values in -c”
  1. clone: handle empty config values in -cJonathan Nieder, May 2, 2017
  2. Brandon WilliamsMay 2, 2017
  3. credential doc: make multiple-helper behavior more prominent (Re: [PATCH] clone: handle empty config values in -c)Jonathan Nieder, May 2, 2017
  4. Brandon WilliamsMay 2, 2017
  5. Jonathan NiederMay 2, 2017
  6. Jeff KingMay 2, 2017
  7. Jeff KingMay 2, 2017
  8. Jeff KingMay 2, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.