Re: [PATCH v2 0/1] replay: make atomic ref updates the default behavior
- From
Kristoffer Haugsbakk <code@khaugsbakk.name>
- Date
- Oct 2, 2025, 17:14 UTC
- Message-ID
- <f0abdc27-6850-4b9d-b4eb-a1c92f731142@app.fastmail.com>
- In-Reply-To
- <20250926230838.35870-1-siddharthasthana31@gmail.com>
On Sat, Sep 27, 2025, at 01:08, Siddharth Asthana wrote:
Show 21 quoted lines
> This is v2 of the git-replay atomic updates series. > > Based on the extensive community feedback from v1, I've completely redesigned > the approach. Instead of adding new --update-refs options, this version makes > atomic ref updates the default behavior of git replay. > > Why this change makes sense: > - git replay is explicitly marked as EXPERIMENTAL with behavior changes > expected > - The command is primarily used server-side where atomic transactions > are crucial > - Current pipeline approach (git replay | git update-ref --stdin) > creates > coordination complexity and lacks atomic guarantees by default > - Patrick Steinhardt noted performance issues with individual ref > updates > in reftable backend > - Elijah Newren and Junio Hamano endorsed making the better behavior > default > >[snip]
On the topic of changing experimental commands: I really like the git-for-each-ref(1) (git-FER) output format design. It just outputs refs and related data. It’s not a command for “bulk delete refs” or “check for merge conflicts between these refs and upstream (git-merge-tree(1)”—it just supports all of that through `--format` and its atoms.
And for this command it seems to, at the core, output a mapping from old to new commits.
Now, I’ve thought that a “client-side”[1] in-memory rebase-like command would need to support outputting data for the `post-rewrite` hook. And is that not straightforward if you can use `--format` with `from` and `to` atoms? (I ask because I have never called hooks with git-hook(1).)
I just think that (naively maybe) a `--format` command like git-FER with all the quoting modes might be a good fit for this command. Then you can compose all the steps you need yourself:
1. Call the exact git-update-ref(1) `--batch`/`--stdin` or whatever mode you need 2. Write a message to each reflog if you want 3. Call the `post-rewrite` hook
† 1: c.f. server-side which I get the impression only wants to do cheap
rebases-- Kristoffer