[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