diff options
-rw-r--r-- | Documentation/git-update-ref.txt | 2 | ||||
-rw-r--r-- | builtin-update-ref.c | 6 | ||||
-rwxr-xr-x | t/t1400-update-ref.sh | 8 |
3 files changed, 12 insertions, 4 deletions
diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.txt index 4dc475992e..80b94c36d9 100644 --- a/Documentation/git-update-ref.txt +++ b/Documentation/git-update-ref.txt @@ -7,7 +7,7 @@ git-update-ref - Update the object name stored in a ref safely SYNOPSIS -------- -'git-update-ref' [-m <reason>] (-d <ref> <oldvalue> | [--no-deref] <ref> <newvalue> [<oldvalue>]) +'git-update-ref' [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] <ref> <newvalue> [<oldvalue>]) DESCRIPTION ----------- diff --git a/builtin-update-ref.c b/builtin-update-ref.c index 1e714a3c93..d90d11d2e3 100644 --- a/builtin-update-ref.c +++ b/builtin-update-ref.c @@ -4,7 +4,7 @@ #include "parse-options.h" static const char * const git_update_ref_usage[] = { - "git-update-ref [options] -d <refname> <oldval>", + "git-update-ref [options] -d <refname> [<oldval>]", "git-update-ref [options] <refname> <newval> [<oldval>]", NULL }; @@ -28,7 +28,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) die("Refusing to perform update with empty message."); if (delete) { - if (argc != 2) + if (argc < 1 || argc > 2) usage_with_options(git_update_ref_usage, options); refname = argv[0]; oldval = argv[1]; @@ -48,7 +48,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) die("%s: not a valid old SHA1", oldval); if (delete) - return delete_ref(refname, oldsha1); + return delete_ref(refname, oldval ? oldsha1 : NULL); else return update_ref(msg, refname, sha1, oldval ? oldsha1 : NULL, no_deref ? REF_NODEREF : 0, DIE_ON_ERR); diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh index b8b7ab4103..f387d46f1a 100755 --- a/t/t1400-update-ref.sh +++ b/t/t1400-update-ref.sh @@ -42,6 +42,14 @@ test_expect_success "delete $m" ' ' rm -f .git/$m +test_expect_success "delete $m without oldvalue verification" " + git update-ref $m $A && + test $A = \$(cat .git/$m) && + git update-ref -d $m && + ! test -f .git/$m +" +rm -f .git/$m + test_expect_success \ "fail to create $n" \ "touch .git/$n_dir |