diff options
| -rw-r--r-- | Documentation/git-update-ref.txt | 18 | ||||
| -rw-r--r-- | builtin/update-ref.c | 2 | ||||
| -rwxr-xr-x | 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 0a0a5512b3..c8f5ae5cb3 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 c61120faf7..6f3b9095cf 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 15f5bfd168..2d61cceb4c 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  '  | 
