git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

             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).