Subject: Re: [PATCH v4 10/15] clone: die on config error in cmd_clone

From: Junio C Hamano <[email-masked]>
Date: Tue, 02 Feb 2016 12:55:55 -0800

Patrick Steinhardt <[email-masked]> writes:

> The clone command does not check for error codes returned by
> `git_config_set` functions. This may cause the user to end up
> with an inconsistent repository without any indication with what
> went wrong.
>
> Fix this problem by dying with an error message when we are
> unable to write the configuration files to disk.

When this happens, the junk_mode is still JUNK_LEAVE_NONE, so upon
hitting such an error, we'd remove everything and die.  And we
haven't wasted the effort for large object transfer yet.

Which all sounds sensible.

> Signed-off-by: Patrick Steinhardt <[email-masked]>
> ---
>  builtin/clone.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/clone.c b/builtin/clone.c
> index 81e238f..f2a2f9a 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -786,12 +786,12 @@ static void write_refspec_config(const char *src_ref_prefix,
>  		/* Configure the remote */
>  		if (value.len) {
>  			strbuf_addf(&key, "remote.%s.fetch", option_origin);
> -			git_config_set_multivar(key.buf, value.buf, "^$", 0);
> +			git_config_set_multivar_or_die(key.buf, value.buf, "^$", 0);
>  			strbuf_reset(&key);
>  
>  			if (option_mirror) {
>  				strbuf_addf(&key, "remote.%s.mirror", option_origin);
> -				git_config_set(key.buf, "true");
> +				git_config_set_or_die(key.buf, "true");
>  				strbuf_reset(&key);
>  			}
>  		}
> @@ -949,14 +949,14 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
>  			src_ref_prefix = "refs/";
>  		strbuf_addstr(&branch_top, src_ref_prefix);
>  
> -		git_config_set("core.bare", "true");
> +		git_config_set_or_die("core.bare", "true");
>  	} else {
>  		strbuf_addf(&branch_top, "refs/remotes/%s/", option_origin);
>  	}
>  
>  	strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
>  	strbuf_addf(&key, "remote.%s.url", option_origin);
> -	git_config_set(key.buf, repo);
> +	git_config_set_or_die(key.buf, repo);
>  	strbuf_reset(&key);
>  
>  	if (option_reference.nr)