Re: [PATCH 1/1] replay: add --revert option to reverse commit changes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 25, 2025, 19:30 UTC
- Message-ID
- <xmqqo6oprjti.fsf@gitster.g>
- In-Reply-To
- <xmqqwm3drk6m.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
Show 44 quoted lines
> In do_pick_commit() where TODO_REVERT command is handled, we find a
> code block that is almost identical to what this patch adds to the
> new helper function; it should be rewritten to call the new helper
> function or perhaps a shared helper function is introduced and
> called from there and also from the sequencer_format_revert_header()
> function, if there is still some impedance mismatch. If such a
> refactoring is done as a separate preliminary patch in a N-patch
> series, the resulting patch series may be easier to follow (and
> there may be other opportunities to reuse existing code more).
> ...
>> diff --git a/sequencer.c b/sequencer.c
>> index 5476d39ba9..e6d82c8368 100644
>> --- a/sequencer.c
>> +++ b/sequencer.c
>> @@ -5572,6 +5572,29 @@ int sequencer_pick_revisions(struct repository *r,
>> return res;
>> }
>>
>> +void sequencer_format_revert_header(struct strbuf *out, const char *orig_subject)
>> +{
>> + const char *revert_subject;
>> +
>> + if (skip_prefix(orig_subject, "Revert \"", &revert_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(revert_subject, "Revert \"")) {
>> + strbuf_addstr(out, "Reapply \"");
>> + strbuf_addstr(out, revert_subject);
>> + strbuf_addch(out, '\n');
>> + } else {
>> + strbuf_addstr(out, "Revert \"");
>> + strbuf_addstr(out, orig_subject);
>> + strbuf_addstr(out, "\"\n");
>> + }
>> +
>> + strbuf_addstr(out, "\nThis reverts commit ");
>> +}
>> +
>
> Dedup with do_pick_commit() where this was taken from. Possibly in
> a separte patch before the main one.Forgot to attach this at the end. What I meant was that something along this line may be a good starting point.
sequencer.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-)
diff --git c/sequencer.c w/sequencer.c index e6d82c8368..29909952d4 100644 --- c/sequencer.c +++ w/sequencer.c @@ -2365,20 +2365,8 @@ static int do_pick_commit(struct repository *r, 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"); + sequencer_format_revert_header(&ctx->message, msg.subject); } strbuf_addstr(&ctx->message, "\nThis reverts commit "); refer_to_commit(opts, &ctx->message, commit);