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 is the third version of this patch series fixing these issues. The only change compared to v2 is a clarification in a comment to better point out which type of backfilling is being tested. Patrick Patrick Steinhardt (7): 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 refs: add interface to iterate over queued transactional updates fetch: make `--atomic` flag cover backfilling of tags fetch: make `--atomic` flag cover pruning of refs builtin/fetch.c | 192 +++++++++++++++++++++++++++++-------------- refs.c | 16 ++++ refs.h | 14 ++++ t/t5503-tagfollow.sh | 74 +++++++++++++++++ t/t5510-fetch.sh | 29 +++++++ 5 files changed, 263 insertions(+), 62 deletions(-) Range-diff against v2: 1: b4ca3f1f3b ! 1: 081174b7a0 fetch: increase test coverage of fetches @@ t/t5503-tagfollow.sh: test_expect_success 'new clone fetch main and tags' ' +test_expect_success 'atomic fetch with failing backfill' ' + git init clone3 && + -+ # We want to test whether a failure when backfilling tags correctly ++ # We want to test whether a failure in `backfill_tags()` correctly + # aborts the complete transaction when `--atomic` is passed: we should + # neither create the branch nor should we create the tag when either + # one of both fails to update correctly. 2: b0a067bbc1 = 2: 9867e76ac7 fetch: backfill tags before setting upstream 3: 0b9d04622d = 3: 7c36ecbcf4 fetch: control lifecycle of FETCH_HEAD in a single place 4: bc1e396ae0 = 4: a7e005dd48 fetch: report errors when backfilling tags fails 5: fac2e3555a = 5: 0316d770e9 refs: add interface to iterate over queued transactional updates 6: 331ee40e57 = 6: 2f98e34c84 fetch: make `--atomic` flag cover backfilling of tags 7: 2ad16530e5 = 7: 7292de826b fetch: make `--atomic` flag cover pruning of refs -- 2.35.1
Attachment:
signature.asc
Description: PGP signature