git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 0/5] fetch: implement support for atomic reference updates

From
Patrick Steinhardt <ps@pks.im>
Date
Jan 12, 2021, 12:27 UTC
Message-ID
<cover.1610454262.git.ps@pks.im>
In-Reply-To
<cover.1610027375.git.ps@pks.im>
Hi,

this is the fourth version of my patch series to implement support for atomic reference updates for git-fetch(1). It's similar to `git push --atomic`, only that it applies to the local side. That is the fetch will either succeed and update all remote references or it will fail and update none.

Changes compared to v3:
    - Fixed indentation of the switch statement in 1/5.
    - Added my missing SOB to 2/5 and fixed a typo in the commit
      message.
Please see the attached range-diff for more details.
Patrick
Patrick Steinhardt (5):
  fetch: extract writing to FETCH_HEAD
  fetch: use strbuf to format FETCH_HEAD updates
  fetch: refactor `s_update_ref` to use common exit path
  fetch: allow passing a transaction to `s_update_ref()`
  fetch: implement support for atomic reference updates
 Documentation/fetch-options.txt |   4 +
 builtin/fetch.c                 | 228 +++++++++++++++++++++++---------
 remote.h                        |   2 +-
 t/t5510-fetch.sh                | 168 +++++++++++++++++++++++
 4 files changed, 342 insertions(+), 60 deletions(-)
Range-diff against v3:
1:  61dc19a1ca ! 1:  9fcc8b54de fetch: extract writing to FETCH_HEAD
    @@ builtin/fetch.c: static int iterate_ref_map(void *cb_data, struct object_id *oid
     +		return;
     +
     +	switch (fetch_head_status) {
    -+		case FETCH_HEAD_NOT_FOR_MERGE:
    -+			merge_status_marker = "not-for-merge";
    -+			break;
    -+		case FETCH_HEAD_MERGE:
    -+			merge_status_marker = "";
    -+			break;
    -+		default:
    -+			/* do not write anything to FETCH_HEAD */
    -+			return;
    ++	case FETCH_HEAD_NOT_FOR_MERGE:
    ++		merge_status_marker = "not-for-merge";
    ++		break;
    ++	case FETCH_HEAD_MERGE:
    ++		merge_status_marker = "";
    ++		break;
    ++	default:
    ++		/* do not write anything to FETCH_HEAD */
    ++		return;
     +	}
     +
     +	fprintf(fetch_head->fp, "%s\t%s\t%s",
2:  a19762690e ! 2:  fb8542270a fetch: use strbuf to format FETCH_HEAD updates
    @@ Commit message
         This commit refactors `append_fetch_head()` to use a `struct strbuf` for
         formatting the update which we're about to append to the FETCH_HEAD
         file. While the refactoring doesn't have much of a benefit right now, it
    -    servers as a preparatory step to implement atomic fetches where we need
    +    serves as a preparatory step to implement atomic fetches where we need
         to buffer all updates to FETCH_HEAD and only flush them out if all
         reference updates succeeded.
     
         No change in behaviour is expected from this commit.
     
    +    Signed-off-by: Patrick Steinhardt <ps@pks.im>
    +
      ## builtin/fetch.c ##
     @@ builtin/fetch.c: static int iterate_ref_map(void *cb_data, struct object_id *oid)
      
    @@ builtin/fetch.c: static int open_fetch_head(struct fetch_head *fetch_head)
      		fetch_head->fp = NULL;
      	}
     @@ builtin/fetch.c: static void append_fetch_head(struct fetch_head *fetch_head,
    - 			return;
    + 		return;
      	}
      
     -	fprintf(fetch_head->fp, "%s\t%s\t%s",
3:  c411f30e09 = 3:  ba6908aa8c fetch: refactor `s_update_ref` to use common exit path
4:  865d357ba7 = 4:  7f820f6f83 fetch: allow passing a transaction to `s_update_ref()`
5:  6a79e7adcc = 5:  0b57d7a651 fetch: implement support for atomic reference updates
-- 
2.30.0
Previous: Junio C HamanoNext: Patrick Steinhardt
Message 36 of 41 in “fetch: implement support for atomic reference updates”
  1. 0/2 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 7, 2021
  2. 1/2 fetch: allow passing a transaction to `s_update_ref()`Patrick Steinhardt, Jan 7, 2021
  3. Junio C HamanoJan 7, 2021
  4. Christian CouderJan 8, 2021
  5. Junio C HamanoJan 8, 2021
  6. 2/2 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 7, 2021
  7. Junio C HamanoJan 8, 2021
  8. 0/4 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 8, 2021
  9. 1/4 fetch: extract writing to FETCH_HEADPatrick Steinhardt, Jan 8, 2021
  10. Junio C HamanoJan 8, 2021
  11. Patrick SteinhardtJan 11, 2021
  12. Junio C HamanoJan 11, 2021
  13. 3/4 fetch: allow passing a transaction to `s_update_ref()`Patrick Steinhardt, Jan 8, 2021
  14. Junio C HamanoJan 8, 2021
  15. 2/4 fetch: refactor `s_update_ref` to use common exit pathPatrick Steinhardt, Jan 8, 2021
  16. Junio C HamanoJan 8, 2021
  17. Patrick SteinhardtJan 11, 2021
  18. 4/4 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 8, 2021
  19. Junio C HamanoJan 9, 2021
  20. Patrick SteinhardtJan 11, 2021
  21. Junio C HamanoJan 11, 2021
  22. Patrick SteinhardtJan 12, 2021
  23. Patrick SteinhardtJan 12, 2021
  24. Junio C HamanoJan 12, 2021
  25. 0/5 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 11, 2021
  26. 1/5 fetch: extract writing to FETCH_HEADPatrick Steinhardt, Jan 11, 2021
  27. Junio C HamanoJan 11, 2021
  28. 2/5 fetch: use strbuf to format FETCH_HEAD updatesPatrick Steinhardt, Jan 11, 2021
  29. Patrick SteinhardtJan 11, 2021
  30. Christian CouderJan 11, 2021
  31. Junio C HamanoJan 11, 2021
  32. 4/5 fetch: allow passing a transaction to `s_update_ref()`Patrick Steinhardt, Jan 11, 2021
  33. 3/5 fetch: refactor `s_update_ref` to use common exit pathPatrick Steinhardt, Jan 11, 2021
  34. 5/5 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 11, 2021
  35. Junio C HamanoJan 12, 2021
  36. 0/5 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 12, 2021
  37. 3/5 fetch: refactor `s_update_ref` to use common exit pathPatrick Steinhardt, Jan 12, 2021
  38. 1/5 fetch: extract writing to FETCH_HEADPatrick Steinhardt, Jan 12, 2021
  39. 2/5 fetch: use strbuf to format FETCH_HEAD updatesPatrick Steinhardt, Jan 12, 2021
  40. 4/5 fetch: allow passing a transaction to `s_update_ref()`Patrick Steinhardt, Jan 12, 2021
  41. 5/5 fetch: implement support for atomic reference updatesPatrick Steinhardt, Jan 12, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.