From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Stefan Beller" <sbeller@google.com>,
"Ronnie Sahlberg" <ronniesahlberg@gmail.com>,
"Jonathan Nieder" <jrnieder@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
git@vger.kernel.org, "Michael Haggerty" <mhagger@alum.mit.edu>
Subject: [PATCH 00/11] Allow reference values to be checked in a transaction
Date: Sun, 8 Feb 2015 17:13:54 +0100 [thread overview]
Message-ID: <1423412045-15616-1-git-send-email-mhagger@alum.mit.edu> (raw)
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 reply other threads:[~2015-02-08 16:21 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-08 16:13 Michael Haggerty [this message]
2015-02-08 16:13 ` [PATCH 01/11] refs: move REF_DELETING to refs.c Michael Haggerty
2015-02-09 18:09 ` Stefan Beller
2015-02-08 16:13 ` [PATCH 02/11] refs: remove the gap in the REF_* constant values Michael Haggerty
2015-02-09 18:14 ` Stefan Beller
2015-02-08 16:13 ` [PATCH 03/11] struct ref_update: move "have_old" into "flags" Michael Haggerty
2015-02-08 16:13 ` [PATCH 04/11] ref_transaction_update(): remove "have_old" parameter Michael Haggerty
2015-02-09 18:20 ` Stefan Beller
2015-02-11 15:32 ` Michael Haggerty
2015-02-08 16:13 ` [PATCH 05/11] ref_transaction_delete(): " Michael Haggerty
2015-02-09 18:22 ` Stefan Beller
2015-02-08 16:14 ` [PATCH 06/11] commit: add tests of commit races Michael Haggerty
2015-02-09 18:31 ` Stefan Beller
2015-02-10 19:12 ` Junio C Hamano
2015-02-11 15:05 ` Michael Haggerty
2015-02-11 18:10 ` Junio C Hamano
2015-02-11 18:24 ` Stefan Beller
2015-02-11 18:54 ` Junio C Hamano
2015-02-08 16:14 ` [PATCH 07/11] commit: avoid race when creating orphan commits Michael Haggerty
2015-02-09 18:35 ` Stefan Beller
2015-02-11 15:47 ` Michael Haggerty
2015-02-08 16:14 ` [PATCH 08/11] ref_transaction_create(): check that new_sha1 is valid Michael Haggerty
2015-02-09 18:35 ` Stefan Beller
2015-02-08 16:14 ` [PATCH 09/11] ref_transaction_delete(): check that old_sha1 is not null_sha1 Michael Haggerty
2015-02-09 18:37 ` Stefan Beller
2015-02-08 16:14 ` [PATCH 10/11] ref_transaction_verify(): new function to check a reference's value Michael Haggerty
2015-02-09 18:50 ` Stefan Beller
2015-02-11 16:11 ` Michael Haggerty
2015-02-08 16:14 ` [PATCH 11/11] update_ref(): improve documentation Michael Haggerty
2015-02-09 18:51 ` Stefan Beller
2015-02-09 18:41 ` [PATCH 00/11] Allow reference values to be checked in a transaction Junio C Hamano
2015-02-09 19:05 ` Stefan Beller
2015-02-09 20:40 ` Michael Haggerty
2015-02-09 20:41 ` Stefan Beller
2015-02-09 20:45 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1423412045-15616-1-git-send-email-mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=pclouds@gmail.com \
--cc=ronniesahlberg@gmail.com \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).