Skip to content

fetch: improve atomicity of `--atomic` flag

Patrick Steinhardt git 3 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest7 patches 5 repliesIn review
  2. v27 patches 14 repliesSuperseded
  3. v16 patches 20 repliesSuperseded

Patches in v3 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7fetch: increase test coverage of fetchest/t5503-tagfollow.sh t/t5510-fetch.sh+114 -05 replies
2/7fetch: backfill tags before setting upstreambuiltin/fetch.c+18 -170 replies
3/7fetch: control lifecycle of FETCH_HEAD in a single placebuiltin/fetch.c+19 -160 replies
4/7fetch: report errors when backfilling tags failsbuiltin/fetch.c t/t5503-tagfollow.sh+19 -110 replies
5/7refs: add interface to iterate over queued transactional updatesrefs.c refs.h+30 -00 replies
6/7fetch: make `--atomic` flag cover backfilling of tagsbuiltin/fetch.c t/t5503-tagfollow.sh+69 -340 replies
7/7fetch: make `--atomic` flag cover pruning of refsbuiltin/fetch.c t/t5510-fetch.sh+24 -140 replies

Reviews trailers per patch

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

Read the v3 thread

Cover letter [PATCH v3 0/7] fetch: improve atomicity of `--atomic` flag

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
Signature · 1 line
2.35.1