From: Junio C Hamano <gitster@pobox.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, Pablo Sabater <pabloosabaterr@gmail.com>,
Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Subject: Re: [PATCH v4 09/10] builtin/history: split handling of ref updates into two phases
Date: Wed, 10 Jun 2026 09:25:41 -0700 [thread overview]
Message-ID: <xmqqwlw6weey.fsf@gitster.g> (raw)
In-Reply-To: <20260610-b4-pks-history-drop-v4-9-70d5f0ae8c25@pks.im> (Patrick Steinhardt's message of "Wed, 10 Jun 2026 10:52:29 +0200")
Patrick Steinhardt <ps@pks.im> writes:
> The function `handle_reference_updates()` is used by git-history(1) to
> update all references that refer to commits that have been rewritten. As
> such, it performs two steps:
>
> - It gathers the references that need to be updated in the first
> place.
>
> - It prepares and commits the reference transaction.
>
> In a subsequent commit we'll want to handle those two steps separately.
> Prepare for this by splitting up the function into two.
OK. I can sees how this will help doing a dry-run mode.
> +static int apply_pending_ref_updates(struct repository *repo,
> + const struct replay_result *result,
> + const char *reflog_msg,
> + int dry_run)
> +{
> + struct ref_transaction *transaction = NULL;
> + struct strbuf err = STRBUF_INIT;
> + int ret;
> +
> + if (!dry_run) {
> + transaction = ref_store_transaction_begin(get_main_ref_store(repo),
> + 0, &err);
> + if (!transaction) {
> + ret = error(_("failed to begin ref transaction: %s"), err.buf);
> + goto out;
> + }
> + }
> +
> + for (size_t i = 0; i < result->updates_nr; i++) {
> ret = handle_ref_update(transaction,
> - decoration->name,
> - &rewritten->object.oid,
> - &original->object.oid,
> + result->updates[i].refname,
> + &result->updates[i].new_oid,
> + &result->updates[i].old_oid,
> reflog_msg, &err);
Cute.
handle_ref_update() uses transaction==NULL not as a signal to update
each ref as request comes (i.e., non-transactional updates) but as a
singal to perform a dry-run, which was unexpected to my taste but it
has been that way since at least February this year ;-)
Looking good.
Thanks.
next prev parent reply other threads:[~2026-06-10 16:25 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 15:36 [PATCH 0/2] builtin/history: introduce "drop" subcommand Patrick Steinhardt
2026-06-01 15:36 ` [PATCH 1/2] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-01 15:36 ` [PATCH 2/2] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-01 23:43 ` Junio C Hamano
2026-06-03 10:06 ` Patrick Steinhardt
2026-06-02 7:31 ` Pablo Sabater
2026-06-03 10:06 ` Patrick Steinhardt
2026-06-03 16:13 ` [PATCH v2 0/9] builtin/history: introduce " Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 1/9] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 2/9] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 3/9] reset: modernize flags passed to `reset_head()` Patrick Steinhardt
2026-06-03 18:01 ` Kristoffer Haugsbakk
2026-06-05 15:08 ` Phillip Wood
2026-06-08 9:14 ` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 4/9] reset: introduce dry-run mode Patrick Steinhardt
2026-06-03 18:18 ` Kristoffer Haugsbakk
2026-06-03 23:49 ` Junio C Hamano
2026-06-03 16:14 ` [PATCH v2 5/9] reset: introduce ability to skip reference updates Patrick Steinhardt
2026-06-03 23:51 ` Junio C Hamano
2026-06-04 9:01 ` Patrick Steinhardt
2026-06-05 15:12 ` Phillip Wood
2026-06-08 9:14 ` Patrick Steinhardt
2026-06-08 9:18 ` Patrick Steinhardt
2026-06-09 10:03 ` Phillip Wood
2026-06-10 7:31 ` Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 6/9] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 7/9] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 8/9] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-03 16:14 ` [PATCH v2 9/9] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-03 19:04 ` Kristoffer Haugsbakk
2026-06-04 9:02 ` Patrick Steinhardt
2026-06-03 23:58 ` Junio C Hamano
2026-06-04 9:02 ` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 0/9] builtin/history: introduce " Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 1/9] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 2/9] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 3/9] reset: modernize flags passed to `reset_head()` Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 4/9] reset: introduce dry-run mode Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 5/9] reset: introduce ability to skip reference updates Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 6/9] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 7/9] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 8/9] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-08 10:23 ` [PATCH v3 9/9] builtin/history: implement "drop" subcommand Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 00/10] builtin/history: introduce " Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 01/10] read-cache: split out function to drop unmerged entries to stage 0 Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 02/10] reset: drop `USE_THE_REPOSITORY_VARIABLE` Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 03/10] reset: rename `reset_head()` Patrick Steinhardt
2026-06-10 13:10 ` Phillip Wood
2026-06-10 8:52 ` [PATCH v4 04/10] reset: modernize flags passed to `reset_working_tree()` Patrick Steinhardt
2026-06-10 13:10 ` Phillip Wood
2026-06-10 8:52 ` [PATCH v4 05/10] reset: introduce dry-run mode Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 06/10] reset: introduce ability to skip updating HEAD Patrick Steinhardt
2026-06-10 13:11 ` Phillip Wood
2026-06-10 8:52 ` [PATCH v4 07/10] reset: allow the caller to specify the current HEAD object Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 08/10] reset: stop assuming that the caller passes in a clean index Patrick Steinhardt
2026-06-10 8:52 ` [PATCH v4 09/10] builtin/history: split handling of ref updates into two phases Patrick Steinhardt
2026-06-10 16:25 ` Junio C Hamano [this message]
2026-06-10 8:52 ` [PATCH v4 10/10] builtin/history: implement "drop" subcommand Patrick Steinhardt
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=xmqqwlw6weey.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=pabloosabaterr@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.