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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to