refs.c: update ref_transaction_delete to check for error and return status
Change ref_transaction_delete() to do basic error checking and return non-zero on error. Update all callers to check the return for ref_transaction_delete(). There are currently no conditions in _delete that will return error but there will be in the future. Add an err argument that will be updated on failure. Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
b416af5bcd
commit
8c8bdc0d35
|
@ -258,8 +258,9 @@ static const char *parse_cmd_delete(struct strbuf *input, const char *next)
|
||||||
if (*next != line_termination)
|
if (*next != line_termination)
|
||||||
die("delete %s: extra input: %s", refname, next);
|
die("delete %s: extra input: %s", refname, next);
|
||||||
|
|
||||||
ref_transaction_delete(transaction, refname, old_sha1,
|
if (ref_transaction_delete(transaction, refname, old_sha1,
|
||||||
update_flags, have_old);
|
update_flags, have_old, &err))
|
||||||
|
die("%s", err.buf);
|
||||||
|
|
||||||
update_flags = 0;
|
update_flags = 0;
|
||||||
free(refname);
|
free(refname);
|
||||||
|
|
12
refs.c
12
refs.c
|
@ -3469,19 +3469,25 @@ int ref_transaction_create(struct ref_transaction *transaction,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ref_transaction_delete(struct ref_transaction *transaction,
|
int ref_transaction_delete(struct ref_transaction *transaction,
|
||||||
const char *refname,
|
const char *refname,
|
||||||
const unsigned char *old_sha1,
|
const unsigned char *old_sha1,
|
||||||
int flags, int have_old)
|
int flags, int have_old,
|
||||||
|
struct strbuf *err)
|
||||||
{
|
{
|
||||||
struct ref_update *update = add_update(transaction, refname);
|
struct ref_update *update;
|
||||||
|
|
||||||
|
if (have_old && !old_sha1)
|
||||||
|
die("BUG: have_old is true but old_sha1 is NULL");
|
||||||
|
|
||||||
|
update = add_update(transaction, refname);
|
||||||
update->flags = flags;
|
update->flags = flags;
|
||||||
update->have_old = have_old;
|
update->have_old = have_old;
|
||||||
if (have_old) {
|
if (have_old) {
|
||||||
assert(!is_null_sha1(old_sha1));
|
assert(!is_null_sha1(old_sha1));
|
||||||
hashcpy(update->old_sha1, old_sha1);
|
hashcpy(update->old_sha1, old_sha1);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int update_ref(const char *action, const char *refname,
|
int update_ref(const char *action, const char *refname,
|
||||||
|
|
8
refs.h
8
refs.h
|
@ -308,11 +308,15 @@ int ref_transaction_create(struct ref_transaction *transaction,
|
||||||
* Add a reference deletion to transaction. If have_old is true, then
|
* Add a reference deletion to transaction. If have_old is true, then
|
||||||
* old_sha1 holds the value that the reference should have had before
|
* old_sha1 holds the value that the reference should have had before
|
||||||
* the update (which must not be the null SHA-1).
|
* the update (which must not be the null SHA-1).
|
||||||
|
* Function returns 0 on success and non-zero on failure. A failure to delete
|
||||||
|
* means that the transaction as a whole has failed and will need to be
|
||||||
|
* rolled back.
|
||||||
*/
|
*/
|
||||||
void ref_transaction_delete(struct ref_transaction *transaction,
|
int ref_transaction_delete(struct ref_transaction *transaction,
|
||||||
const char *refname,
|
const char *refname,
|
||||||
const unsigned char *old_sha1,
|
const unsigned char *old_sha1,
|
||||||
int flags, int have_old);
|
int flags, int have_old,
|
||||||
|
struct strbuf *err);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Commit all of the changes that have been queued in transaction, as
|
* Commit all of the changes that have been queued in transaction, as
|
||||||
|
|
Loading…
Reference in New Issue