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

[PATCH v4 00/16] ref-transaction-rename

From
Stefan Beller <sbeller@google.com>
Date
Nov 18, 2014, 01:44 UTC
Message-ID
<1416275097-3616-1-git-send-email-sbeller@google.com>
Hi,

This series builds on the previous series : ref-transaction-reflog as applied to master. This series has been sent to the list before[1]

This series can also be found at github[2] as well as googlesource[3].

This series converts ref rename to use a transaction. This addesses several issues in the old implementation, such as colliding renames might overwrite someone elses reflog, and it makes the rename atomic.

As part of the series we also move changes that cover multiple refs to happen as an atomic transaction/rename to the pacekd refs file. This makes it possible to have both the rename case (one deleted ref + one created ref) as well as any operation that updates multiple refs to become one atomic rename() applied to the packed refs file. Thus all such changes are now also atomic to all external observers.

Thanks, Stefan

Version 2:
- Changed to not use potentially iterators to copy the reflog entries one
  by one. Instead adding two new functions. One to read an existing reflog
  as one big blob, and a second function to, in a transaction, write a new
  complete reflog from said blob.
  The idea is that each future reflog backend will provide optimized
  versions for these "read whole reflog" "write whole reflog" functions.
Version 3:
- Rename and redo the API for updating a whole reflog in one single operation
  to transaction_rename_reflog()
Version 4:
 * As Ronnie announced to change employers soon, he'll have only limited
   time to work on git in the near future. As this is a rather large patch
   series, he is handing this work over to me. That's why I'm sending the
   patches this time.

[1] http://www.spinics.net/lists/git/msg241352.html [2] https://github.com/stefanbeller/git/tree/ref-transactions-rename [3] https://code-review.googlesource.com/#/q/topic:ref-transaction-rename

Ronnie Sahlberg (16):
  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: use a stringlist for repack_without_refs
  refs.c: add transaction support for renaming a reflog
  refs.c: update rename_ref to use a transaction
  refs.c: rollback the lockfile before we die() in repack_without_refs
  refs.c: move reflog updates into its own function
  refs.c: write updates to packed refs when a transaction has more than
    one ref
  remote.c: use a transaction for deleting refs
  refs.c: make repack_without_refs static
  refs.c: make the *_packed_refs functions static
  refs.c: replace the onerr argument in update_ref with a strbuf err
  refs.c: make add_packed_ref return an error instead of calling die
  refs.c: make lock_packed_refs take an err argument
  refs.c: add an err argument to pack_refs
 builtin/checkout.c    |   7 +-
 builtin/clone.c       |  36 ++-
 builtin/merge.c       |  20 +-
 builtin/notes.c       |  24 +-
 builtin/pack-refs.c   |   8 +-
 builtin/reflog.c      |  19 +-
 builtin/remote.c      |  69 +++---
 builtin/reset.c       |  12 +-
 builtin/update-ref.c  |   7 +-
 notes-cache.c         |   2 +-
 notes-utils.c         |   5 +-
 refs.c                | 616 ++++++++++++++++++++++++++++++--------------------
 refs.h                |  79 +++----
 t/t3200-branch.sh     |   7 -
 t/t5516-fetch-push.sh |   2 +-
 transport-helper.c    |   7 +-
 transport.c           |   9 +-
 17 files changed, 552 insertions(+), 377 deletions(-)
-- 
2.2.0.rc2.5.gf7b9fb2
Next: Stefan Beller
Message 1 of 17 in “ref-transaction-rename”
  1. 00/16 ref-transaction-renameStefan Beller, Nov 18, 2014
  2. 01/16 refs.c: allow passing raw git_committer_info as email to _update_reflogStefan Beller, Nov 18, 2014
  3. 02/16 refs.c: return error instead of dying when locking fails during transactionStefan Beller, Nov 18, 2014
  4. 03/16 refs.c: use packed refs when deleting refs during a transactionStefan Beller, Nov 18, 2014
  5. 04/16 refs.c: use a stringlist for repack_without_refsStefan Beller, Nov 18, 2014
  6. 05/16 refs.c: add transaction support for renaming a reflogStefan Beller, Nov 18, 2014
  7. 06/16 refs.c: update rename_ref to use a transactionStefan Beller, Nov 18, 2014
  8. 07/16 refs.c: rollback the lockfile before we die() in repack_without_refsStefan Beller, Nov 18, 2014
  9. 08/16 refs.c: move reflog updates into its own functionStefan Beller, Nov 18, 2014
  10. 09/16 refs.c: write updates to packed refs when a transaction has more than one refStefan Beller, Nov 18, 2014
  11. 10/16 remote.c: use a transaction for deleting refsStefan Beller, Nov 18, 2014
  12. 11/16 refs.c: make repack_without_refs staticStefan Beller, Nov 18, 2014
  13. 12/16 refs.c: make the *_packed_refs functions staticStefan Beller, Nov 18, 2014
  14. 13/16 refs.c: replace the onerr argument in update_ref with a strbuf errStefan Beller, Nov 18, 2014
  15. 14/16 refs.c: make add_packed_ref return an error instead of calling dieStefan Beller, Nov 18, 2014
  16. 15/16 refs.c: make lock_packed_refs take an err argumentStefan Beller, Nov 18, 2014
  17. 16/16 refs.c: add an err argument to pack_refsStefan Beller, Nov 18, 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.