From: Siddharth Asthana <siddharthasthana31@gmail.com>
To: phillip.wood@dunelm.org.uk, git@vger.kernel.org
Cc: christian.couder@gmail.com, ps@pks.im, newren@gmail.com,
gitster@pobox.com, karthik.188@gmail.com,
johannes.schindelin@gmx.de, toon@iotcl.com
Subject: Re: [PATCH v3 1/2] sequencer: extract revert message formatting into shared function
Date: Fri, 6 Mar 2026 10:30:54 +0530 [thread overview]
Message-ID: <bb2a9b1f-5cdd-4c4e-91dc-a631beb009bb@gmail.com> (raw)
In-Reply-To: <c2048ddf-ced4-425d-af6e-14e9442e9d99@gmail.com>
On 26/02/26 19:57, Phillip Wood wrote:
> Hi Siddharth
>
> On 18/02/2026 23:42, Siddharth Asthana wrote:
>> The logic for formatting revert commit messages (handling "Revert" and
>> "Reapply" cases) is currently duplicated between sequencer.c and will be
>> needed by builtin/replay.c.
>>
>> Extract this logic into a new sequencer_format_revert_header() function
>> that can be shared. The function handles both regular reverts ("Revert
>> "<subject>"") and revert-of-revert cases ("Reapply "<subject>"").
>> When an oid is provided, the function appends the full commit hash and
>> period; otherwise the caller should append the commit reference.
>>
>> Update do_pick_commit() to use the new helper, eliminating code
>> duplication while preserving the special handling for
>> commit_use_reference.
>
> I agree with the other comments that this ends up being a bit awkward, I
> think
> something like the diff below which moves all of the revert message
> formatting
> into a helper function would be a better approach. Note that I've also
> added a
> repository argument to refer_to_commit(). You might want to do that in a
> separate commit, but I think it is worth doing if we're adding more
> callers.
> I've also just used a bool for the use_commit_reference flag, if we want
> to add
> more flags in the future we can convert it to an unsigned int when we do
> that.
Thanks, this is much cleaner. Moving refer_to_commit() and the
merge-parent handling into the same function gets rid of the awkward
NULL oid path that Toon and Junio pointed out.
I will split the refer_to_commit() signature change (adding struct
repository *r) into a preparatory commit as you suggested, then have the
second commit introduce the full sequencer_format_revert_message() helper.
For replay, I will call it with use_commit_reference=false -- that gives
the full OID through refer_to_commit() directly, no special causing needed.
>
> Thanks
>
> Phillip
>
>
> ---- 8< ----
> diff --git a/sequencer.c b/sequencer.c
> index a3eb39bb252..30f6da6f959 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -2198,21 +2198,55 @@ static int should_edit(struct replay_opts *opts) {
> return opts->edit;
> }
>
> -static void refer_to_commit(struct replay_opts *opts,
> - struct strbuf *msgbuf, struct commit *commit)
> +static void refer_to_commit(struct repository*r, struct strbuf *msgbuf,
> + const struct commit *commit, bool use_commit_reference)
> {
> - if (opts->commit_use_reference) {
> + if (use_commit_reference) {
> struct pretty_print_context ctx = {
> .abbrev = DEFAULT_ABBREV,
> .date_mode.type = DATE_SHORT,
> };
> - repo_format_commit_message(the_repository, commit,
> + repo_format_commit_message(r, commit,
> "%h (%s, %ad)", msgbuf, &ctx);
> } else {
> strbuf_addstr(msgbuf, oid_to_hex(&commit->object.oid));
> }
> }
>
> +void sequencer_format_revert_message(struct repository *r, const char
> *subject,
> + const struct commit *commit, const struct commit *parent,
> + bool use_commit_reference, struct strbuf *message)
> +{
> + const char *orig_subject;
> +
> + if (use_commit_reference) {
> + strbuf_commented_addf(message, comment_line_str,
> + "*** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
> + } else if (skip_prefix(subject, "Revert \"", &orig_subject) &&
> + /*
> + * We don't touch pre-existing repeated reverts, because
> + * theoretically these can be nested arbitrarily deeply,
> + * thus requiring excessive complexity to deal with.
> + */
> + !starts_with(orig_subject, "Revert \"")) {
> + strbuf_addstr(message, "Reapply \"");
> + strbuf_addstr(message, orig_subject);
> + strbuf_addstr(message, "\n");
> + } else {
> + strbuf_addstr(message, "Revert \"");
> + strbuf_addstr(message, subject);
> + strbuf_addstr(message, "\"\n");
> + }
> + strbuf_addstr(message, "\nThis reverts commit ");
> + refer_to_commit(r, message, commit, use_commit_reference);
> +
> + if (commit->parents && commit->parents->next) {
> + strbuf_addstr(message, ", reversing\nchanges made to ");
> + refer_to_commit(r, message, parent, use_commit_reference);
> + }
> + strbuf_addstr(message, ".\n");
> +}
> +
> static const char *sequencer_reflog_action(struct replay_opts *opts)
> {
> if (!opts->reflog_action) {
> @@ -2356,38 +2390,13 @@ static int do_pick_commit(struct repository *r,
> */
>
> if (command == TODO_REVERT) {
> - const char *orig_subject;
> -
> base = commit;
> base_label = msg.label;
> next = parent;
> next_label = msg.parent_label;
> - if (opts->commit_use_reference) {
> - strbuf_commented_addf(&ctx->message, comment_line_str,
> - "*** SAY WHY WE ARE REVERTING ON THE TITLE LINE ***");
> - } else if (skip_prefix(msg.subject, "Revert \"", &orig_subject) &&
> - /*
> - * We don't touch pre-existing repeated reverts, because
> - * theoretically these can be nested arbitrarily deeply,
> - * thus requiring excessive complexity to deal with.
> - */
> - !starts_with(orig_subject, "Revert \"")) {
> - strbuf_addstr(&ctx->message, "Reapply \"");
> - strbuf_addstr(&ctx->message, orig_subject);
> - strbuf_addstr(&ctx->message, "\n");
> - } else {
> - strbuf_addstr(&ctx->message, "Revert \"");
> - strbuf_addstr(&ctx->message, msg.subject);
> - strbuf_addstr(&ctx->message, "\"\n");
> - }
> - strbuf_addstr(&ctx->message, "\nThis reverts commit ");
> - refer_to_commit(opts, &ctx->message, commit);
> -
> - if (commit->parents && commit->parents->next) {
> - strbuf_addstr(&ctx->message, ", reversing\nchanges made to ");
> - refer_to_commit(opts, &ctx->message, parent);
> - }
> - strbuf_addstr(&ctx->message, ".\n");
> + sequencer_format_revert_message(r,msg.subject, commit, parent,
> + opts->commit_use_reference,
> + &ctx->message);
> } else {
> const char *p;
>
> diff --git a/sequencer.h b/sequencer.h
> index 719684c8a9f..a61ec6d81d4 100644
> --- a/sequencer.h
> +++ b/sequencer.h
> @@ -271,4 +271,8 @@ int sequencer_determine_whence(struct repository *r,
> enum commit_whence *whence)
> */
> int sequencer_get_update_refs_state(const char *wt_dir, struct
> string_list *refs);
>
> +void sequencer_format_revert_message(struct repository *r, const char
> *subject,
> + const struct commit *commit, const struct commit
> *parent,
> + bool use_commit_reference, struct strbuf *message);
> +
> #endif /* SEQUENCER_H */
>
next prev parent reply other threads:[~2026-03-06 5:01 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-25 17:00 [PATCH 0/1] replay: add --revert option to reverse commit changes Siddharth Asthana
2025-11-25 17:00 ` [PATCH 1/1] " Siddharth Asthana
2025-11-25 19:22 ` Junio C Hamano
2025-11-25 19:30 ` Junio C Hamano
2025-11-25 19:39 ` Junio C Hamano
2025-11-25 20:06 ` Junio C Hamano
2025-11-26 19:31 ` Siddharth Asthana
2025-11-26 19:28 ` Siddharth Asthana
2025-11-26 19:26 ` Siddharth Asthana
2025-11-26 21:13 ` Junio C Hamano
2025-11-27 19:23 ` Siddharth Asthana
2025-11-26 11:10 ` Phillip Wood
2025-11-26 17:35 ` Elijah Newren
2025-11-26 18:41 ` Junio C Hamano
2025-11-26 21:17 ` Junio C Hamano
2025-11-26 23:06 ` Elijah Newren
2025-11-26 23:14 ` Junio C Hamano
2025-11-26 23:57 ` Elijah Newren
2025-11-26 19:50 ` Siddharth Asthana
2025-11-26 19:39 ` Siddharth Asthana
2025-11-27 16:21 ` Phillip Wood
2025-11-27 19:24 ` Siddharth Asthana
2025-11-25 17:25 ` [PATCH 0/1] " Johannes Schindelin
2025-11-25 18:02 ` Junio C Hamano
2025-11-26 19:18 ` Siddharth Asthana
2025-11-26 21:04 ` Junio C Hamano
2025-11-27 19:21 ` Siddharth Asthana
2025-11-27 20:17 ` Junio C Hamano
2025-11-28 8:07 ` Elijah Newren
2025-11-28 8:24 ` Siddharth Asthana
2025-11-28 16:35 ` Junio C Hamano
2025-11-28 17:07 ` Elijah Newren
2025-11-28 20:50 ` Junio C Hamano
2025-11-28 22:03 ` Elijah Newren
2025-11-29 5:59 ` Junio C Hamano
2025-12-02 20:16 ` [PATCH v2 0/2] replay: add --revert mode " Siddharth Asthana
2025-12-02 20:16 ` [PATCH v2 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2025-12-05 11:33 ` Patrick Steinhardt
2025-12-07 23:00 ` Siddharth Asthana
2025-12-08 7:07 ` Patrick Steinhardt
2026-02-11 13:03 ` Toon Claes
2026-02-11 13:40 ` Patrick Steinhardt
2026-02-11 15:23 ` Kristoffer Haugsbakk
2026-02-11 17:41 ` Junio C Hamano
2026-02-18 22:53 ` Siddharth Asthana
2025-12-02 20:16 ` [PATCH v2 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
2025-12-05 11:33 ` Patrick Steinhardt
2025-12-07 23:03 ` Siddharth Asthana
2025-12-16 16:23 ` Phillip Wood
2026-02-18 23:42 ` [PATCH v3 0/2] " Siddharth Asthana
2026-02-18 23:42 ` [PATCH v3 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2026-02-20 17:01 ` Toon Claes
2026-02-25 21:53 ` Junio C Hamano
2026-03-06 4:55 ` Siddharth Asthana
2026-03-06 4:31 ` Siddharth Asthana
2026-02-26 14:27 ` Phillip Wood
2026-03-06 5:00 ` Siddharth Asthana [this message]
2026-02-18 23:42 ` [PATCH v3 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
2026-02-20 17:35 ` Toon Claes
2026-02-20 20:23 ` Junio C Hamano
2026-02-23 9:13 ` Christian Couder
2026-02-23 11:23 ` Toon Claes
2026-03-06 5:05 ` Siddharth Asthana
2026-02-26 14:45 ` Phillip Wood
2026-03-06 5:28 ` Siddharth Asthana
2026-03-06 15:52 ` Phillip Wood
2026-03-06 16:20 ` Siddharth Asthana
2026-03-13 5:40 ` [PATCH v4 0/2] " Siddharth Asthana
2026-03-13 5:40 ` [PATCH v4 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2026-03-13 15:53 ` Junio C Hamano
2026-03-16 19:12 ` Toon Claes
2026-03-16 16:57 ` Phillip Wood
2026-03-13 5:40 ` [PATCH v4 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
2026-03-16 16:57 ` Phillip Wood
2026-03-16 19:52 ` Toon Claes
2026-03-17 10:11 ` Phillip Wood
2026-03-16 16:59 ` [PATCH v4 0/2] " Phillip Wood
2026-03-16 19:53 ` Toon Claes
2026-03-24 22:03 ` [PATCH v5 " Siddharth Asthana
2026-03-24 22:04 ` [PATCH v5 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2026-03-24 22:04 ` [PATCH v5 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
2026-03-25 6:29 ` Junio C Hamano
2026-03-25 15:10 ` Toon Claes
2026-03-25 15:38 ` Siddharth Asthana
2026-03-25 16:44 ` Phillip Wood
2026-03-25 15:36 ` Siddharth Asthana
2026-03-25 20:23 ` [PATCH v6 0/2] " Siddharth Asthana
2026-03-25 20:23 ` [PATCH v6 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2026-03-25 20:23 ` [PATCH v6 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
2026-03-28 4:33 ` Tian Yuchen
2026-03-25 20:23 ` [PATCH v6 1/2] sequencer: extract revert message formatting into shared function Siddharth Asthana
2026-03-25 20:23 ` [PATCH v6 2/2] replay: add --revert mode to reverse commit changes Siddharth Asthana
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=bb2a9b1f-5cdd-4c4e-91dc-a631beb009bb@gmail.com \
--to=siddharthasthana31@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=karthik.188@gmail.com \
--cc=newren@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=ps@pks.im \
--cc=toon@iotcl.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox