[PATCH 02/31] refs.c: make ref_transaction_delete a wrapper for ref_transaction_update

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]