git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 4/9] ref_transaction_add_update(): remove a check

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Nov 5, 2017, 08:42 UTC
Message-ID
<dc062014fca792d183d29847ef3b2937ab1d3667.1509870243.git.mhagger@alum.mit.edu>
In-Reply-To
<cover.1509870243.git.mhagger@alum.mit.edu>

We want to make `REF_ISPRUNING` internal to the files backend. For this to be possible, `ref_transaction_add_update()` mustn't know about it. So move the check that `REF_ISPRUNING` is only used with `REF_NODEREF` from this function to `files_transaction_prepare()`.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs.c               | 3 ---
 refs/files-backend.c | 7 ++++++-
 2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/refs.c b/refs.c
index 7c1e206e08..0d9a1348cd 100644
--- a/refs.c
+++ b/refs.c
@@ -906,9 +906,6 @@ struct ref_update *ref_transaction_add_update(
 	if (transaction->state != REF_TRANSACTION_OPEN)
 		die("BUG: update called for transaction that is not open");
 
-	if ((flags & REF_ISPRUNING) && !(flags & REF_NODEREF))
-		die("BUG: REF_ISPRUNING set without REF_NODEREF");
-
 	FLEX_ALLOC_STR(update, refname, refname);
 	ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
 	transaction->updates[transaction->nr++] = update;
diff --git a/refs/files-backend.c b/refs/files-backend.c
index ba72d28b13..a47771e4d4 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2518,13 +2518,18 @@ static int files_transaction_prepare(struct ref_store *ref_store,
 	 * transaction. (If we end up splitting up any updates using
 	 * split_symref_update() or split_head_update(), those
 	 * functions will check that the new updates don't have the
-	 * same refname as any existing ones.)
+	 * same refname as any existing ones.) Also fail if any of the
+	 * updates use REF_ISPRUNING without REF_NODEREF.
 	 */
 	for (i = 0; i < transaction->nr; i++) {
 		struct ref_update *update = transaction->updates[i];
 		struct string_list_item *item =
 			string_list_append(&affected_refnames, update->refname);
 
+		if ((update->flags & REF_ISPRUNING) &&
+		    !(update->flags & REF_NODEREF))
+			BUG("REF_ISPRUNING set without REF_NODEREF");
+
 		/*
 		 * We store a pointer to update in item->util, but at
 		 * the moment we never use the value of this field
-- 
2.14.1
Previous: Thomas Gummerer
Message 12 of 12 in “Tidy up the constants related to ref_update::flags”
  1. 0/9 Tidy up the constants related to ref_update::flagsMichael Haggerty, Nov 5, 2017
  2. 1/9 files_transaction_prepare(): don't leak flags to packed transactionMichael Haggerty, Nov 5, 2017
  3. 7/9 refs: rename constant `REF_ISPRUNING` to `REF_IS_PRUNING`Michael Haggerty, Nov 5, 2017
  4. 8/9 write_packed_entry(): take `object_id` argumentsMichael Haggerty, Nov 5, 2017
  5. 9/9 refs: update some more docs to use "oid" rather than "sha1"Michael Haggerty, Nov 5, 2017
  6. 5/9 refs: tidy up and adjust visibility of the `ref_update` flagsMichael Haggerty, Nov 5, 2017
  7. 6/9 refs: rename constant `REF_NODEREF` to `REF_NO_DEREF`Michael Haggerty, Nov 5, 2017
  8. 2/9 prune_ref(): call `ref_transaction_add_update()` directlyMichael Haggerty, Nov 5, 2017
  9. 3/9 ref_transaction_update(): die on disallowed flagsMichael Haggerty, Nov 5, 2017
  10. Martin ÅgrenNov 7, 2017
  11. Thomas GummererNov 7, 2017
  12. 4/9 ref_transaction_add_update(): remove a checkMichael Haggerty, Nov 5, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.