diff options
author | Patrick Steinhardt <ps@pks.im> | 2023-11-14 08:58:46 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2023-11-17 01:12:12 (GMT) |
commit | d6f8e7298254d8291724f9f57648b3ab5f8d3770 (patch) | |
tree | d879f6bb5d55f46db41b55c6ac46c71fcbc868e6 /refs/files-backend.c | |
parent | e85e5dd78aea907702970ae121b0b4e29b3ea90b (diff) | |
download | git-d6f8e7298254d8291724f9f57648b3ab5f8d3770.zip git-d6f8e7298254d8291724f9f57648b3ab5f8d3770.tar.gz git-d6f8e7298254d8291724f9f57648b3ab5f8d3770.tar.bz2 |
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/files-backend.c')
-rw-r--r-- | refs/files-backend.c | 46 |
1 files changed, 1 insertions, 45 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index 778d3a9..8d28810 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1268,51 +1268,7 @@ static int files_pack_refs(struct ref_store *ref_store, static int files_delete_refs(struct ref_store *ref_store, const char *msg, struct string_list *refnames, unsigned int flags) { - struct ref_transaction *transaction; - struct strbuf err = STRBUF_INIT; - struct string_list_item *item; - int ret = 0, failures = 0; - - 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) { - ret = error("%s", err.buf); - goto out; - } - - for_each_string_list_item(item, refnames) { - ret = ref_transaction_delete(transaction, item->string, - NULL, flags, msg, &err); - if (ret) { - warning(_("could not delete reference %s: %s"), - item->string, err.buf); - strbuf_reset(&err); - failures = 1; - } - } - - 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); - } - -out: - if (!ret && failures) - ret = -1; - ref_transaction_free(transaction); - strbuf_release(&err); - return ret; + return refs_delete_refs(ref_store, msg, refnames, flags); } /* |