git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ronnie Sahlberg <sahlberg@google.com>
To: git@vger.kernel.org
Cc: Ronnie Sahlberg <sahlberg@google.com>
Subject: [PATCH 0/4] Use transactions for renames
Date: Thu,  5 Jun 2014 16:17:10 -0700	[thread overview]
Message-ID: <1402010234-7628-1-git-send-email-sahlberg@google.com> (raw)

This series is based on ref-transactions-reflog
It is also available at
https://github.com/rsahlberg/git/tree/ref-transactions-rename

This series adds support to perform rename_ref as a single transaction for
both deleting/re-creating the ref and updating the reflog.

Since we no longer use rename() for the reflog changes we can now support
renames even if the reflogs are symlinks.

In order to make the delete-then-create fully atomic and also to ensure that
at no point in time is the object unreferenced we add support to do
deletes via the packed refs file to transaction_commit. For any refs that are
to be deleted, we first copy these refs to the packed refs file.
This allows us to immediately delete the loose ref files for those refs and
still being able to cancel/rollback the transaction.
Once all the changes are successfully updated we finally commit the packed
refs file a second time at which stage all the refs-to-be-deleted all
disappear in one atomic rename().

This allows us to perform transactions that delete multiple refs and have the
delete appear as one atomic transaction to any external observer.


Ronnie Sahlberg (4):
  refs.c: allow passing raw git_committer_info as email to
    _update_reflog
  refs.c: return error instead of dying when locking fails during
    transaction
  refs.c: use packed refs when deleting refs during a transaction
  refs.c: update rename_ref to use a transaction

 refs.c            | 308 +++++++++++++++++++++++++++++++++---------------------
 refs.h            |   1 +
 t/t3200-branch.sh |   7 --
 3 files changed, 192 insertions(+), 124 deletions(-)

-- 
2.0.0.583.g402232d

             reply	other threads:[~2014-06-05 23:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-05 23:17 Ronnie Sahlberg [this message]
2014-06-05 23:17 ` [PATCH 1/4] refs.c: allow passing raw git_committer_info as email to _update_reflog Ronnie Sahlberg
2014-06-05 23:17 ` [PATCH 2/4] refs.c: return error instead of dying when locking fails during transaction Ronnie Sahlberg
2014-06-05 23:17 ` [PATCH 3/4] refs.c: use packed refs when deleting refs during a transaction Ronnie Sahlberg
2014-06-05 23:17 ` [PATCH 4/4] refs.c: update rename_ref to use " Ronnie Sahlberg

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=1402010234-7628-1-git-send-email-sahlberg@google.com \
    --to=sahlberg@google.com \
    --cc=git@vger.kernel.org \
    /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).