Re: [PATCH v2 15/27] update-ref --stdin -z: Deprecate interpreting the empty string as zeros

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Michael Haggerty <mhagger@xxxxxxxxxxxx> writes:

> In the original version of this command, for the single case of the
> "update" command's <newvalue>, the empty string was interpreted as
> being equivalent to 40 "0"s.  This shorthand is unnecessary (binary
> input will usually be generated programmatically anyway), and it
> complicates the parser and the documentation.

Nice.

>
> So gently deprecate this usage: remove its description from the
> documentation and emit a warning if it is found.  But for reasons of
> backwards compatibility, continue to accept it.
>
> Helped-by: Brad King <brad.king@xxxxxxxxxxx>
> Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx>
> ---
>  Documentation/git-update-ref.txt | 18 ++++++++++++------
>  builtin/update-ref.c             |  2 ++
>  t/t1400-update-ref.sh            |  5 +++--
>  3 files changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.txt
> index 0a0a551..c8f5ae5 100644
> --- a/Documentation/git-update-ref.txt
> +++ b/Documentation/git-update-ref.txt
> @@ -68,7 +68,12 @@ performs all modifications together.  Specify commands of the form:
>  	option SP <opt> LF
>  
>  Quote fields containing whitespace as if they were strings in C source
> -code.  Alternatively, use `-z` to specify commands without quoting:
> +code; i.e., surrounded by double-quotes and with backslash escapes.
> +Use 40 "0" characters or the empty string to specify a zero value.  To
> +specify a missing value, omit the value and its preceding SP entirely.
> +
> +Alternatively, use `-z` to specify in NUL-terminated format, without
> +quoting:
>  
>  	update SP <ref> NUL <newvalue> NUL [<oldvalue>] NUL
>  	create SP <ref> NUL <newvalue> NUL
> @@ -76,8 +81,12 @@ code.  Alternatively, use `-z` to specify commands without quoting:
>  	verify SP <ref> NUL [<oldvalue>] NUL
>  	option SP <opt> NUL
>  
> -Lines of any other format or a repeated <ref> produce an error.
> -Command meanings are:
> +In this format, use 40 "0" to specify a zero value, and use the empty
> +string to specify a missing value.
> +
> +In either format, values can be specified in any form that Git
> +recognizes as an object name.  Commands in any other format or a
> +repeated <ref> produce an error.  Command meanings are:
>  
>  update::
>  	Set <ref> to <newvalue> after verifying <oldvalue>, if given.
> @@ -102,9 +111,6 @@ option::
>  	The only valid option is `no-deref` to avoid dereferencing
>  	a symbolic ref.
>  
> -Use 40 "0" or the empty string to specify a zero value, except that
> -with `-z` an empty <oldvalue> is considered missing.
> -
>  If all <ref>s can be locked with matching <oldvalue>s
>  simultaneously, all modifications are performed.  Otherwise, no
>  modifications are performed.  Note that while each individual
> diff --git a/builtin/update-ref.c b/builtin/update-ref.c
> index 6462b2f..eef7537 100644
> --- a/builtin/update-ref.c
> +++ b/builtin/update-ref.c
> @@ -154,6 +154,8 @@ static int parse_next_sha1(struct strbuf *input, const char **next,
>  				goto invalid;
>  		} else if (flags & PARSE_SHA1_ALLOW_EMPTY) {
>  			/* With -z, treat an empty value as all zeros: */
> +			warning("%s %s: missing <newvalue>, treating as zero",
> +				command, refname);
>  			hashclr(sha1);
>  		} else {
>  			/*
> diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh
> index 15f5bfd..2d61cce 100755
> --- a/t/t1400-update-ref.sh
> +++ b/t/t1400-update-ref.sh
> @@ -730,10 +730,11 @@ test_expect_success 'stdin -z fails update with bad ref name' '
>  	grep "fatal: invalid ref format: ~a" err
>  '
>  
> -test_expect_success 'stdin -z treats empty new value as zeros' '
> +test_expect_success 'stdin -z emits warning with empty new value' '
>  	git update-ref $a $m &&
>  	printf $F "update $a" "" "" >stdin &&
> -	git update-ref -z --stdin <stdin &&
> +	git update-ref -z --stdin <stdin 2>err &&
> +	grep "warning: update $a: missing <newvalue>, treating as zero" err &&
>  	test_must_fail git rev-parse --verify -q $a
>  '
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]