diff options
| author | Patrick Steinhardt <ps@pks.im> | 2023-11-14 09:58:46 +0100 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2023-11-17 10:12:12 +0900 |
| commit | d6f8e7298254d8291724f9f57648b3ab5f8d3770 (patch) | |
| tree | d879f6bb5d55f46db41b55c6ac46c71fcbc868e6 /refs/packed-backend.c | |
| parent | e85e5dd78aea907702970ae121b0b4e29b3ea90b (diff) | |
| download | git-d6f8e7298254d8291724f9f57648b3ab5f8d3770.tar.xz | |
refs: deduplicate code to delete references
Both the files and the packed-refs reference backends now use the same
generic transactions-based code to delete references. Let's pull these
implementations up into `refs_delete_refs()` to deduplicate the code.
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs/packed-backend.c')
| -rw-r--r-- | refs/packed-backend.c | 45 |
1 files changed, 1 insertions, 44 deletions
diff --git a/refs/packed-backend.c b/refs/packed-backend.c index 59c78d7941..1589577005 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -1691,50 +1691,7 @@ static int packed_initial_transaction_commit(struct ref_store *ref_store UNUSED, static int packed_delete_refs(struct ref_store *ref_store, const char *msg, struct string_list *refnames, unsigned int flags) { - struct packed_ref_store *refs = - packed_downcast(ref_store, REF_STORE_WRITE, "delete_refs"); - struct strbuf err = STRBUF_INIT; - struct ref_transaction *transaction; - struct string_list_item *item; - int ret; - - (void)refs; /* We need the check above, but don't use the variable */ - - if (!refnames->nr) - return 0; - - /* - * Since we don't check the references' old_oids, the - * individual updates can't fail, so we can pack all of the - * updates into a single transaction. - */ - - transaction = ref_store_transaction_begin(ref_store, &err); - if (!transaction) - return -1; - - for_each_string_list_item(item, refnames) { - if (ref_transaction_delete(transaction, item->string, NULL, - flags, msg, &err)) { - warning(_("could not delete reference %s: %s"), - item->string, err.buf); - strbuf_reset(&err); - } - } - - ret = ref_transaction_commit(transaction, &err); - - if (ret) { - if (refnames->nr == 1) - error(_("could not delete reference %s: %s"), - refnames->items[0].string, err.buf); - else - error(_("could not delete references: %s"), err.buf); - } - - ref_transaction_free(transaction); - strbuf_release(&err); - return ret; + return refs_delete_refs(ref_store, msg, refnames, flags); } static int packed_pack_refs(struct ref_store *ref_store UNUSED, |
