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