git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/5] ref-transactions-rename

From
Ronnie Sahlberg <sahlberg@google.com>
Date
Jul 25, 2014, 16:58 UTC
Message-ID
<1406307521-10339-1-git-send-email-sahlberg@google.com>

This patch series adds support for using transactions and atomic renames. It focuses on what needs to be done in order to support fully atomic and rollbackable renames that may or may not involve name conflicts.

By performing the actual delete old/create new via a single operation to the packed refs file this process will also appear as an atomic change for any external observers.

(While this series is "short" it contains a very important change where we start performing ref changes as operations inside a locked packed refs file instead of as discreete operations of loose ref files. This approach will be extended in the next patch series where we will start using it also to make multi-ref creations/updates become fully atomic for external observers.)

This series is built on iand depend on the previous reflog series:
  * rs/ref-transaction-reflog (2014-07-23) 15 commits
   - refs.c: allow deleting refs with a broken sha1
   - refs.c: remove lock_any_ref_for_update
   - refs.c: make unlock_ref/close_ref/commit_ref static
   - refs.c: rename log_ref_setup to create_reflog
   - reflog.c: use a reflog transaction when writing during expire
   - refs.c: allow multiple reflog updates during a single transaction
   - refs.c: only write reflog update if msg is non-NULL
   - refs.c: add a flag to allow reflog updates to truncate the log
   - refs.c: add a transaction function to append a reflog entry
   - lockfile.c: make hold_lock_file_for_append preserve meaningful errno
   - refs.c: add a function to append a reflog entry to a fd
   - refs.c: add a new update_type field to ref_update
   - refs.c: rename the transaction functions
   - refs.c: make ref_transaction_delete a wrapper for ref_transaction_update
   - refs.c: make ref_transaction_create a wrapper to ref_transaction_update
   (this branch uses rs/ref-transaction and rs/ref-transaction-1.)
Ronnie Sahlberg (5):
  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: rollback the lockfile before we die() in repack_without_refs
 builtin/remote.c  |  13 +-
 refs.c            | 369 +++++++++++++++++++++++++++++-------------------------
 refs.h            |   1 +
 t/t3200-branch.sh |   7 --
 4 files changed, 210 insertions(+), 180 deletions(-)
-- 
2.0.1.508.g763ab16
Next: Ronnie Sahlberg
Message 1 of 13 in “ref-transactions-rename”
  1. 0/5 ref-transactions-renameRonnie Sahlberg, Jul 25, 2014
  2. 1/5 refs.c: allow passing raw git_committer_info as email to _update_reflogRonnie Sahlberg, Jul 25, 2014
  3. Jonathan NiederJul 25, 2014
  4. Ronnie SahlbergJul 28, 2014
  5. Eric SunshineJul 28, 2014
  6. 2/5 refs.c: return error instead of dying when locking fails during transactionRonnie Sahlberg, Jul 25, 2014
  7. Jonathan NiederJul 25, 2014
  8. Ronnie SahlbergJul 28, 2014
  9. 3/5 refs.c: use packed refs when deleting refs during a transactionRonnie Sahlberg, Jul 25, 2014
  10. Jonathan NiederJul 25, 2014
  11. 4/5 refs.c: update rename_ref to use a transactionRonnie Sahlberg, Jul 25, 2014
  12. Jonathan NiederJul 25, 2014
  13. 5/5 refs.c: rollback the lockfile before we die() in repack_without_refsRonnie Sahlberg, Jul 25, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.