[PATCH 0/6] fetch: improve atomicity of `--atomic` flag
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Feb 11, 2022, 07:46 UTC
- Message-ID
- <cover.1644565025.git.ps@pks.im>
Hi,
in c7b190dabd (fetch: implement support for atomic reference updates, 2021-01-12), I have added a new `--atomic` flag to git-fetch(1) which is supposed to make it an all-or-nothing operation: either all refs are updated, or none is. I have recently discovered though that there were two oversights: neither pruning of refs via `--prune` nor the tag backfill mechanism are currently covered by this flag, which breaks the promise.
This patch series extends coverage of the `--atomic` flag to fix my oversights. It applies on top of ps/avoid-unnecessary-hook-invocation-with-packed-refs merged to v2.35.1 due to a semantic conflict in tests: I use the reftx hook to verify some things work as expected, and above branch causes us to not execute the hook for packed-refs anymore.
It is structured as follows:
- Patch 1 adds multiple tests which demonstrate issues with
backfilling and the lacking atomicity. - Patch 2 and 3 do some preliminary refactorings which set the stage
for improved atomicity. - Patch 4 fixes a bug with backfilling tags: we don't return an
error code to the user if the backfill fails.- Patch 5 and 6 then finally extend the atomicity guarantees.
I'm not yet all that happy with patch 5: it currently has to reach into the `ref_transaction` struct to be able to filter out any updates which have already been queued such that we don't accidentally queue the same tag update twice. I first wanted to get some feedback on this patch series though, and in case it is agreed that it fixes a real issue I may introduce a new non-internal API which allows iterating over queued updates.
Patrick
Patrick Steinhardt (6): fetch: increase test coverage of fetches fetch: backfill tags before setting upstream fetch: control lifecycle of FETCH_HEAD in a single place fetch: report errors when backfilling tags fails fetch: make `--atomic` flag cover backfilling of tags fetch: make `--atomic` flag cover pruning of refs
builtin/fetch.c | 190 +++++++++++++++++++++++++++++-------------- t/t5503-tagfollow.sh | 78 ++++++++++++++++++ t/t5510-fetch.sh | 31 +++++++ 3 files changed, 236 insertions(+), 63 deletions(-)
-- 2.35.1