Hi Phillip & Junio,
I apologize for the delay in sending out v4. I will respond to
and update the code in the following patchset (if needed)
as soon as possible.
My apologies!
---- On Tue, 14 Oct 2025 20:24:13 +0800 Li Chen <me@linux.beauty> wrote ---
> From: Li Chen <chenl311@chinatelecom.cn>
>
> This patch series teaches git rebase a new
> --trailer <text> option and, as a prerequisite, moves all trailer
> handling out of the external interpret-trailers helper and into the
> builtin code path, as suggested by Phillip Wood.
>
> Patch 0 switches trailer.c to an in-memory implementation
> (amend_strbuf_with_trailers()). It removes every fork/exec.
>
> Patch 1~8 fix all reviewer comments from v3 for patch 0.
>
> Patch 9 builds on that helper to implement
> git rebase --trailer. When the option is given we:
> force the merge backend (apply/am backend lacks a message filter),
> automatically enable --force-rebase so that fast-forwarded
> commits are rewritten, and append the requested trailer(s) to every
> rewritten commit.
> State is stored in $state_dir/trailer so an interrupted rebase can
> resume safely. A dedicated test-suite (t3440) exercises plain,
> conflict, --root, invalid-input scenarios and etc.
>
> The rest patches address all reviewer comments from v3 for patch 9.
>
> All t/*.sh testcases have run successfully.
>
> v4: fix all reviewer comments in v3. [2]
> v3: merges the remaining trailer paths into one in-process helper, dropping the
> duplicate code, as pointed by Junio and Phillip [1]
> v2: fix issues pointed by Phillip
> RFC link: https://lore.kernel.org/git/196a5ac1393.f5b4db7d187309.2451613571977217927@linux.beauty/
>
> Comments welcome!
>
> [1]: https://lore.kernel.org/git/xmqq8qlzkukw.fsf@gitster.g/
> [2]: https://lore.kernel.org/git/20250803150059.402017-1-me@linux.beauty/
>
> Li Chen (29):
> trailer: append trailers in-process and drop the fork to
> `interpret-trailers`
> trailer: restore interpret_trailers helper
> trailer: drop --trailer prefix handling in amend helper
> trailer: move config_head and arg_head to if storage
> trailer: use bool for had_trailer_before
> interpret-trailers: buffer stdout output
> trailer: mirror interpret-trailers output flow
> trailer: handle trailer append failures gently
> rebase: support --trailer
> rebase: inline trailer state paths
> rebase: reuse buffer for trailer args
> rebase: drop redundant strbuf_release call
> rebase: skip stripping of --trailer option prefix
> rebase: die on invalid trailer args
> rebase: validate trailers with configured separators
> sequencer: add trailers to message before writing file
> tests: t3440: create expect files at point of use
> tests: t3440: check apply backend error includes option
> tests: t3440: use test_commit_message for trailer checks
> tests: t3440: drop redundant resets and pass branch to rebase where
> needed
> tests: t3440: assert trailer on HEAD after conflict rebase
> rebase: persist --trailer options across restarts
> tests: t3440: remove redundant --keep-empty
> tests: t3440: use helper for trailer checks
> tests: t3440: test --trailer without values
> tests: t3440: convert ex.com to example.com
> tests: t3440: ensure trailers persist after rebase continue
> tests: t3440: exercise trailer config mapping
> sequencer: honor --trailer with fixup -C
>
> Documentation/git-rebase.adoc | 7 ++
> builtin/commit.c | 2 +-
> builtin/interpret-trailers.c | 94 +++++-------------------
> builtin/rebase.c | 50 +++++++++++++
> builtin/tag.c | 3 +-
> sequencer.c | 34 +++++++++
> sequencer.h | 4 +-
> t/meson.build | 1 +
> t/t3440-rebase-trailer.sh | 134 ++++++++++++++++++++++++++++++++++
> trailer.c | 130 ++++++++++++++++++++++++++++++---
> trailer.h | 23 +++++-
> wrapper.c | 16 ++++
> wrapper.h | 6 ++
> 13 files changed, 411 insertions(+), 93 deletions(-)
> create mode 100755 t/t3440-rebase-trailer.sh
>
> --
> 2.51.0
>
>
Regards,
Li