This is v2 of a patch series to implement reference transactions for the packed refs-store. Thanks to Stefan, Brandon, Junio, and Peff for your review of v1 [1]. I believe I have addressed all of your comments. Changes since v1: * Patch [01/11]: justify the change better in the log message. Add a comment explaining why `get_packed_ref_cache()` is being called but the return value discarded. * Patch [05/11]: Lock the `packed-refs` file *after* successfully creating the (empty) transaction object. This prevents leaving the file locked if `ref_store_transaction_begin()` fails. * Patch [06/11]: New patch, fixing a leak of the `refs_to_prune` linked list. * Patch [07/11]: Reimplement test "no bogus intermediate values during delete" to work without polling. Also incorporate Junio's change `s/grep/test_i18ngrep/`. These changes are also available as branch `packed-ref-transactions` from my GitHub repo [2]. Michael [1] https://public-inbox.org/git/cover.1503993268.git.mhagger@xxxxxxxxxxxx/ [2] https://github.com/mhagger/git Michael Haggerty (11): packed-backend: don't adjust the reference count on lock/unlock struct ref_transaction: add a place for backends to store data packed_ref_store: implement reference transactions packed_delete_refs(): implement method files_pack_refs(): use a reference transaction to write packed refs prune_refs(): also free the linked list files_initial_transaction_commit(): use a transaction for packed refs t1404: demonstrate two problems with reference transactions files_ref_store: use a transaction to update packed refs packed-backend: rip out some now-unused code files_transaction_finish(): delete reflogs before references refs/files-backend.c | 214 ++++++++++++++------ refs/packed-backend.c | 461 +++++++++++++++++++++++++++++-------------- refs/packed-backend.h | 17 +- refs/refs-internal.h | 1 + t/t1404-update-ref-errors.sh | 73 +++++++ 5 files changed, 550 insertions(+), 216 deletions(-) -- 2.14.1