We want to allow to delete a ref even if it only exists as a packed ref so we must tweak the REF_ISPACKONLY test in _update so it only applies to the non-delete case. Signed-off-by: Ronnie Sahlberg <sahlberg@xxxxxxxxxx> --- refs.c | 17 ++++++----------- refs.h | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/refs.c b/refs.c index fe195dd..c180fa2 100644 --- a/refs.c +++ b/refs.c @@ -3326,7 +3326,7 @@ int ref_transaction_update(struct ref_transaction *transaction, if (transaction->status != REF_TRANSACTION_OPEN) die("BUG: update on transaction that is not open"); - if (flags & REF_ISPACKONLY) + if (flags & REF_ISPACKONLY && !is_null_sha1(new_sha1)) die("BUG: REF_ISPACKONLY can not be used with updates"); update = add_update(transaction, refname); @@ -3370,19 +3370,14 @@ int ref_transaction_delete(struct ref_transaction *transaction, if (have_old && !old_sha1) die("BUG: have_old is true but old_sha1 is NULL"); + if (have_old && is_null_sha1(old_sha1)) + die("BUG: have_old is true but old_sha1 is null_sha1"); + if (transaction->status != REF_TRANSACTION_OPEN) die("BUG: delete on transaction that is not open"); - update = add_update(transaction, refname); - update->flags = flags; - update->have_old = have_old; - if (have_old) { - assert(!is_null_sha1(old_sha1)); - hashcpy(update->old_sha1, old_sha1); - } - if (msg) - update->msg = xstrdup(msg); - return 0; + return ref_transaction_update(transaction, refname, null_sha1, + old_sha1, flags, have_old, msg); } int update_ref(const char *action, const char *refname, diff --git a/refs.h b/refs.h index d615871..8d56edf 100644 --- a/refs.h +++ b/refs.h @@ -232,7 +232,7 @@ void ref_transaction_rollback(struct ref_transaction *transaction); /* * Add a reference update to transaction. new_sha1 is the value that - * the reference should have after the update, or zeros if it should + * the reference should have after the update, or null_sha1 if it should * be deleted. If have_old is true and old_sha is not the null_sha1 * then the previous value of the ref must match or the update will fail. * If have_old is true and old_sha1 is the null_sha1 then the ref must not -- 2.0.0.rc3.506.g3739a35 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html