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

[PATCH 00/11] Allow reference values to be checked in a transaction

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Feb 8, 2015, 16:13 UTC
Message-ID
<1423412045-15616-1-git-send-email-mhagger@alum.mit.edu>

The main purpose of this series is to simplify the interface to reference transactions as follows:

* Remove the need to supply an explicit have_old parameter to
  ref_transaction_update() and ref_transaction_delete(). Instead,
  check the old_sha1 if and only if it is non-NULL.
* Allow NULL to be supplied to ref_transaction_update() as new_sha1,
  in which case old_sha1 will be verified under lock, but the
  reference's value will not be altered.
* Add a function ref_transaction_verify(), which verifies the current
  value of a reference without changing it.
* Make the similarity between ref_transaction_update() and
  update_ref() more obvious.

Along the way, it fixes a race that could happen if two processes try to create an orphan commit at the same time.

This patch series applies on top of master merged together with sb/atomic-push, which in turn depends on mh/reflog-expire. It is also available from my GitHub account [1] as branch "refs-have-new":

It's nothing earth-shattering, but I think it is a worthwhile cleanup.
Michael
[1] https://github.com/mhagger/git
Michael Haggerty (11):
  refs: move REF_DELETING to refs.c
  refs: remove the gap in the REF_* constant values
  struct ref_update: move "have_old" into "flags"
  ref_transaction_update(): remove "have_old" parameter
  ref_transaction_delete(): remove "have_old" parameter
  commit: add tests of commit races
  commit: avoid race when creating orphan commits
  ref_transaction_create(): check that new_sha1 is valid
  ref_transaction_delete(): check that old_sha1 is not null_sha1
  ref_transaction_verify(): new function to check a reference's value
  update_ref(): improve documentation
 branch.c                |   5 +-
 builtin/commit.c        |   4 +-
 builtin/fetch.c         |   6 ++-
 builtin/receive-pack.c  |   5 +-
 builtin/replace.c       |   2 +-
 builtin/tag.c           |   2 +-
 builtin/update-ref.c    |  17 +++----
 fast-import.c           |   6 +--
 refs.c                  | 130 +++++++++++++++++++++++++++++++++---------------
 refs.h                  |  61 ++++++++++++++++-------
 sequencer.c             |   2 +-
 t/t7516-commit-races.sh |  38 ++++++++++++++
 walker.c                |   2 +-
 13 files changed, 197 insertions(+), 83 deletions(-)
 create mode 100755 t/t7516-commit-races.sh
-- 
2.1.4
Next: Michael Haggerty
Message 1 of 35 in “Allow reference values to be checked in a transaction”
  1. 00/11 Allow reference values to be checked in a transactionMichael Haggerty, Feb 8, 2015
  2. 01/11 refs: move REF_DELETING to refs.cMichael Haggerty, Feb 8, 2015
  3. Stefan BellerFeb 9, 2015
  4. 02/11 refs: remove the gap in the REF_* constant valuesMichael Haggerty, Feb 8, 2015
  5. Stefan BellerFeb 9, 2015
  6. 03/11 struct ref_update: move "have_old" into "flags"Michael Haggerty, Feb 8, 2015
  7. 04/11 ref_transaction_update(): remove "have_old" parameterMichael Haggerty, Feb 8, 2015
  8. Stefan BellerFeb 9, 2015
  9. Michael HaggertyFeb 11, 2015
  10. 05/11 ref_transaction_delete(): remove "have_old" parameterMichael Haggerty, Feb 8, 2015
  11. Stefan BellerFeb 9, 2015
  12. 06/11 commit: add tests of commit racesMichael Haggerty, Feb 8, 2015
  13. Stefan BellerFeb 9, 2015
  14. Junio C HamanoFeb 10, 2015
  15. Michael HaggertyFeb 11, 2015
  16. Junio C HamanoFeb 11, 2015
  17. Stefan BellerFeb 11, 2015
  18. Junio C HamanoFeb 11, 2015
  19. 07/11 commit: avoid race when creating orphan commitsMichael Haggerty, Feb 8, 2015
  20. Stefan BellerFeb 9, 2015
  21. Michael HaggertyFeb 11, 2015
  22. 08/11 ref_transaction_create(): check that new_sha1 is validMichael Haggerty, Feb 8, 2015
  23. Stefan BellerFeb 9, 2015
  24. 09/11 ref_transaction_delete(): check that old_sha1 is not null_sha1Michael Haggerty, Feb 8, 2015
  25. Stefan BellerFeb 9, 2015
  26. 10/11 ref_transaction_verify(): new function to check a reference's valueMichael Haggerty, Feb 8, 2015
  27. Stefan BellerFeb 9, 2015
  28. Michael HaggertyFeb 11, 2015
  29. 11/11 update_ref(): improve documentationMichael Haggerty, Feb 8, 2015
  30. Stefan BellerFeb 9, 2015
  31. Junio C HamanoFeb 9, 2015
  32. Stefan BellerFeb 9, 2015
  33. Michael HaggertyFeb 9, 2015
  34. Stefan BellerFeb 9, 2015
  35. Junio C HamanoFeb 9, 2015

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.