[PATCH b4] ez: avoid duplicate signatures on resend
Cássio Gabriel <[email protected]> Mon, 25 May 2026 01:14:23 -0300
| Newsgroups | org.kernel.linux.tools |
|---|---|
| Message-ID | <[email protected]> |
'b4 send --resend' rebuilds messages from the historical sent tag and appends the current email signature to the cover text. If the stored cover already ends in a signature block, the regenerated resend can carry two footer blocks, as we can see here[1]. Strip an existing trailing cover signature before adding the current one. Recognize both the standard "-- " delimiter and the bare "--" delimiter observed in archived mail. [1] https://lore.kernel.org/all/20260511-alsa-hda-cs35l41-fw-work-teardown-v1-1-1184e9bc4f25@gmail.com/ Signed-off-by: Cássio Gabriel <[email protected]> --- src/b4/ez.py | 15 +++++++++++---- src/tests/test_ez.py | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/b4/ez.py b/src/b4/ez.py index 3e81138..4f55f0f 100644 --- a/src/b4/ez.py +++ b/src/b4/ez.py @@ -1734,6 +1734,15 @@ def get_cover_subject_body(cover: str) -> Tuple[b4.LoreSubject, str]: return lsubject, cbody +def strip_cover_signature(cbody: str) -> str: + body = cbody.replace('\r', '').rstrip('\n') + sigpos = max(body.rfind('\n-- \n'), body.rfind('\n--\n')) + if sigpos >= 0: + return body[:sigpos].rstrip('\n') + + return body + + def rethread(patches: List[Tuple[str, EmailMessage]]) -> None: refto = patches[0][1].get('message-id') if refto is not None: @@ -1992,7 +2001,7 @@ def get_sent_tag_as_patches( cover, base_commit, change_id = get_base_changeid_from_tag(tagname) csubject, cbody = get_cover_subject_body(cover) - cbody = cbody.strip() + '\n-- \n' + b4.get_email_signature() + cbody = strip_cover_signature(cbody) + '\n-- \n' + b4.get_email_signature() prefixes = ['RESEND'] + csubject.get_extra_prefixes(exclude=['RESEND']) msgid_tpt = make_msgid_tpt(change_id, revision) seriests = int(time.time()) @@ -2659,9 +2668,7 @@ def reroll( mybranch: str, tag_msg: str, msgid: str, tagprefix: str = SENT_TAG_PREFIX ) -> None: # Remove signature - chunks = tag_msg.rsplit('\n-- \n') - if len(chunks) > 1: - tag_msg = chunks[0] + '\n' + tag_msg = strip_cover_signature(tag_msg) + '\n' cover, tracking = load_cover(strip_comments=True) revision = tracking['series']['revision'] diff --git a/src/tests/test_ez.py b/src/tests/test_ez.py index 3d05ef9..5abfea2 100644 --- a/src/tests/test_ez.py +++ b/src/tests/test_ez.py @@ -408,3 +408,24 @@ def test_store_cover_preserves_series_notes(prepdir_commit: str) -> None: ecode, backup_oid = b4.git_run_command(None, ['rev-parse', f'refs/original/{cb}']) assert ecode == 0 assert backup_oid.strip() == pre_head + + [email protected]('sigmarker', ['-- ', '--']) +def test_strip_cover_signature(sigmarker: str) -> None: + cbody = ( + 'Cover text.\n\n' + '---\n' + 'base-commit: abc123\n' + 'change-id: 20260101-test-change-id\n\n' + 'Best regards,\n' + f'{sigmarker}\n' + 'Test User <[email protected]>\n' + ) + + assert b4.ez.strip_cover_signature(cbody) == ( + 'Cover text.\n\n' + '---\n' + 'base-commit: abc123\n' + 'change-id: 20260101-test-change-id\n\n' + 'Best regards,' + ) --- base-commit: d5d981426ead3f490713ef5d2fd1aa3d0f13b005 change-id: 20260525-resend-signature-fix-9ef453adc559 Best regards, -- Cássio Gabriel <[email protected]>