Michael Haggerty <mhag...@alum.mit.edu> 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.k...@kitware.com>
> Signed-off-by: Michael Haggerty <mhag...@alum.mit.edu>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to