update-ref: fix "verify" command with missing <oldvalue>
[gitweb.git] / builtin / update-ref.c
index 54a48c0cfaab57122fc7ce57c525638c2c95408c..1993529521c0ef20860795168392d1dd7209c991 100644 (file)
@@ -14,6 +14,7 @@ static const char * const git_update_ref_usage[] = {
 
 static char line_termination = '\n';
 static int update_flags;
+static const char *msg;
 
 /*
  * Parse one whitespace- or NUL-terminated, possibly C-quoted argument
@@ -198,7 +199,7 @@ static const char *parse_cmd_update(struct ref_transaction *transaction,
                die("update %s: extra input: %s", refname, next);
 
        if (ref_transaction_update(transaction, refname, new_sha1, old_sha1,
-                                  update_flags, have_old, &err))
+                                  update_flags, have_old, msg, &err))
                die("%s", err.buf);
 
        update_flags = 0;
@@ -229,7 +230,7 @@ static const char *parse_cmd_create(struct ref_transaction *transaction,
                die("create %s: extra input: %s", refname, next);
 
        if (ref_transaction_create(transaction, refname, new_sha1,
-                                  update_flags, &err))
+                                  update_flags, msg, &err))
                die("%s", err.buf);
 
        update_flags = 0;
@@ -264,7 +265,7 @@ static const char *parse_cmd_delete(struct ref_transaction *transaction,
                die("delete %s: extra input: %s", refname, next);
 
        if (ref_transaction_delete(transaction, refname, old_sha1,
-                                  update_flags, have_old, &err))
+                                  update_flags, have_old, msg, &err))
                die("%s", err.buf);
 
        update_flags = 0;
@@ -281,26 +282,22 @@ static const char *parse_cmd_verify(struct ref_transaction *transaction,
        char *refname;
        unsigned char new_sha1[20];
        unsigned char old_sha1[20];
-       int have_old;
 
        refname = parse_refname(input, &next);
        if (!refname)
                die("verify: missing <ref>");
 
        if (parse_next_sha1(input, &next, old_sha1, "verify", refname,
-                           PARSE_SHA1_OLD)) {
-               hashclr(new_sha1);
-               have_old = 0;
-       } else {
-               hashcpy(new_sha1, old_sha1);
-               have_old = 1;
-       }
+                           PARSE_SHA1_OLD))
+               hashclr(old_sha1);
+
+       hashcpy(new_sha1, old_sha1);
 
        if (*next != line_termination)
                die("verify %s: extra input: %s", refname, next);
 
        if (ref_transaction_update(transaction, refname, new_sha1, old_sha1,
-                                  update_flags, have_old, &err))
+                                  update_flags, 1, msg, &err))
                die("%s", err.buf);
 
        update_flags = 0;
@@ -354,7 +351,7 @@ static void update_refs_stdin(struct ref_transaction *transaction)
 
 int cmd_update_ref(int argc, const char **argv, const char *prefix)
 {
-       const char *refname, *oldval, *msg = NULL;
+       const char *refname, *oldval;
        unsigned char sha1[20], oldsha1[20];
        int delete = 0, no_deref = 0, read_stdin = 0, end_null = 0, flags = 0;
        struct option options[] = {
@@ -385,7 +382,7 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix)
                if (end_null)
                        line_termination = '\0';
                update_refs_stdin(transaction);
-               if (ref_transaction_commit(transaction, msg, &err))
+               if (ref_transaction_commit(transaction, &err))
                        die("%s", err.buf);
                ref_transaction_free(transaction);
                strbuf_release(&err);