Skip to content

refs: remove virtual `delete_refs()` function

Patrick Steinhardt git 1 version New

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest4 patches 0 repliesNew

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/4t5510: ensure that the packed-refs file needs lockingt/t5510-fetch.sh+1 -00 replies
2/4refs/files: use transactions to delete referencesrefs/files-backend.c+34 -320 replies
3/4refs: deduplicate code to delete referencesrefs.c refs/files-backend.c refs/packed-backend.c+47 -920 replies
4/4refs: remove `delete_refs` callback from backendsrefs/debug.c refs/files-backend.c refs/packed-backend.c +1 more+0 -320 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [PATCH 0/4] refs: remove virtual `delete_refs()` function

Hi,

this patch series refactors the virtual delete_refs() function to instead be implemented generically via a single reference transaction.

The main intent of this patch series is to reduce complexity that we have in the reference backends so that it becomes easier to implement new backends that have the same semantics as others. But at the same time, benchmarks show that the new generic code is even faster than the old backend-specific code. This is mostly because we avoid the overhead of per-reference transactions when deleting many references, but also because the transactional code in the files backend knows to avoid rewriting the packed-refs file in case it contains none of the refs that are to be deleted.

So in the end we have less duplicate code in the files backend, make it easier to implement new backends, and have faster deletion of many refs in the files backend.

Patrick

Patrick Steinhardt (4):
t5510: ensure that the packed-refs file needs locking refs/files: use transactions to delete references
refs: deduplicate code to delete references
refs: remove delete_refs callback from backends

 refs.c                | 48 ++++++++++++++++++++++++++++++++++++++---
 refs/debug.c          | 15 -------------
 refs/files-backend.c  | 49 ------------------------------------------
 refs/packed-backend.c | 50 -------------------------------------------
 refs/refs-internal.h  |  3 ---
 t/t5510-fetch.sh      |  1 +
 6 files changed, 46 insertions(+), 120 deletions(-)

base-commit: e0939bec273052b1a8d69db4a3f7c87aaf83e220

Signature · 1 line
2.42.0