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@xxxxxxxxxxxx> --- 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