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

[PATCH 0/4] Use transactions for renames

From
Ronnie Sahlberg <sahlberg@google.com>
Date
Jun 5, 2014, 23:17 UTC
Message-ID
<1402010234-7628-1-git-send-email-sahlberg@google.com>

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
Next: Ronnie Sahlberg
Message 1 of 5 in “Use transactions for renames”
  1. 0/4 Use transactions for renamesRonnie Sahlberg, Jun 5, 2014
  2. 1/4 refs.c: allow passing raw git_committer_info as email to _update_reflogRonnie Sahlberg, Jun 5, 2014
  3. 2/4 refs.c: return error instead of dying when locking fails during transactionRonnie Sahlberg, Jun 5, 2014
  4. 3/4 refs.c: use packed refs when deleting refs during a transactionRonnie Sahlberg, Jun 5, 2014
  5. 4/4 refs.c: update rename_ref to use a transactionRonnie Sahlberg, Jun 5, 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.