Skip to content

Commit

Permalink
update-ref --stdin: improve error messages for invalid values
Browse files Browse the repository at this point in the history
If an invalid value is passed to "update-ref --stdin" as <oldvalue> or
<newvalue>, include the command and the name of the reference at the
beginning of the error message.  Update the tests accordingly.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed Apr 7, 2014
1 parent ed410e6 commit 1746ef4
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 15 deletions.
24 changes: 13 additions & 11 deletions builtin/update-ref.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,22 @@ static struct ref_update *update_alloc(void)
return update;
}

static void update_store_new_sha1(struct ref_update *update,
static void update_store_new_sha1(const char *command,
struct ref_update *update,
const char *newvalue)
{
if (*newvalue && get_sha1(newvalue, update->new_sha1))
die("invalid new value for ref %s: %s",
update->ref_name, newvalue);
die("%s %s: invalid new value: %s",
command, update->ref_name, newvalue);
}

static void update_store_old_sha1(struct ref_update *update,
static void update_store_old_sha1(const char *command,
struct ref_update *update,
const char *oldvalue)
{
if (*oldvalue && get_sha1(oldvalue, update->old_sha1))
die("invalid old value for ref %s: %s",
update->ref_name, oldvalue);
die("%s %s: invalid old value: %s",
command, update->ref_name, oldvalue);

/* We have an old value if non-empty, or if empty without -z */
update->have_old = *oldvalue || line_termination;
Expand Down Expand Up @@ -165,12 +167,12 @@ static const char *parse_cmd_update(struct strbuf *input, const char *next)
die("update line missing <ref>");

if (!parse_next_arg(input, &next, &newvalue))
update_store_new_sha1(update, newvalue.buf);
update_store_new_sha1("update", update, newvalue.buf);
else
die("update %s missing <newvalue>", update->ref_name);

if (!parse_next_arg(input, &next, &oldvalue)) {
update_store_old_sha1(update, oldvalue.buf);
update_store_old_sha1("update", update, oldvalue.buf);
if (*next != line_termination)
die("update %s has extra input: %s", update->ref_name, next);
} else if (!line_termination)
Expand All @@ -191,7 +193,7 @@ static const char *parse_cmd_create(struct strbuf *input, const char *next)
die("create line missing <ref>");

if (!parse_next_arg(input, &next, &newvalue))
update_store_new_sha1(update, newvalue.buf);
update_store_new_sha1("create", update, newvalue.buf);
else
die("create %s missing <newvalue>", update->ref_name);

Expand All @@ -216,7 +218,7 @@ static const char *parse_cmd_delete(struct strbuf *input, const char *next)
die("delete line missing <ref>");

if (!parse_next_arg(input, &next, &oldvalue)) {
update_store_old_sha1(update, oldvalue.buf);
update_store_old_sha1("delete", update, oldvalue.buf);
if (update->have_old && is_null_sha1(update->old_sha1))
die("delete %s given zero old value", update->ref_name);
} else if (!line_termination)
Expand All @@ -240,7 +242,7 @@ static const char *parse_cmd_verify(struct strbuf *input, const char *next)
die("verify line missing <ref>");

if (!parse_next_arg(input, &next, &value)) {
update_store_old_sha1(update, value.buf);
update_store_old_sha1("verify", update, value.buf);
hashcpy(update->new_sha1, update->old_sha1);
} else if (!line_termination)
die("verify %s missing [<oldvalue>] NUL", update->ref_name);
Expand Down
8 changes: 4 additions & 4 deletions t/t1400-update-ref.sh
Original file line number Diff line number Diff line change
Expand Up @@ -518,14 +518,14 @@ test_expect_success 'stdin update ref fails with wrong old value' '
test_expect_success 'stdin update ref fails with bad old value' '
echo "update $c $m does-not-exist" >stdin &&
test_must_fail git update-ref --stdin <stdin 2>err &&
grep "fatal: invalid old value for ref $c: does-not-exist" err &&
grep "fatal: update $c: invalid old value: does-not-exist" err &&
test_must_fail git rev-parse --verify -q $c
'

test_expect_success 'stdin create ref fails with bad new value' '
echo "create $c does-not-exist" >stdin &&
test_must_fail git update-ref --stdin <stdin 2>err &&
grep "fatal: invalid new value for ref $c: does-not-exist" err &&
grep "fatal: create $c: invalid new value: does-not-exist" err &&
test_must_fail git rev-parse --verify -q $c
'

Expand Down Expand Up @@ -840,14 +840,14 @@ test_expect_success 'stdin -z update ref fails with wrong old value' '
test_expect_success 'stdin -z update ref fails with bad old value' '
printf $F "update $c" "$m" "does-not-exist" >stdin &&
test_must_fail git update-ref -z --stdin <stdin 2>err &&
grep "fatal: invalid old value for ref $c: does-not-exist" err &&
grep "fatal: update $c: invalid old value: does-not-exist" err &&
test_must_fail git rev-parse --verify -q $c
'

test_expect_success 'stdin -z create ref fails with bad new value' '
printf $F "create $c" "does-not-exist" >stdin &&
test_must_fail git update-ref -z --stdin <stdin 2>err &&
grep "fatal: invalid new value for ref $c: does-not-exist" err &&
grep "fatal: create $c: invalid new value: does-not-exist" err &&
test_must_fail git rev-parse --verify -q $c
'

Expand Down

0 comments on commit 1746ef4

Please sign in to comment.