All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Harald Nordgren via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Harald Nordgren <haraldnordgren@gmail.com>
Subject: Re: [PATCH v2 2/2] imap-send: accept messages with Subject before Date
Date: Wed, 21 Oct 2026 10:25:02 +0200	[thread overview]
Message-ID: <ath23vYy0n8UFLUB@pks.im> (raw)
In-Reply-To: <c42827a1225e49db2e0855638e4e76a06f7d9eba.1792566469.git.gitgitgadget@gmail.com>

On Wed, Oct 21, 2026 at 07:07:49AM +0000, Harald Nordgren via GitGitGadget wrote:
> From: Harald Nordgren <haraldnordgren@gmail.com>
> 
> Patches sent with git send-email cannot be fed back into git imap-send
> after fetching them from the mailing list archive, for example with
> 
>     b4 mbox --single-message -o - <url> | git imap-send
> 
> which fails with "no messages found to send". imap-send only counts a
> message when its From, Date and Subject headers come in that order,
> and git send-email writes Subject before Date.
> 
> Accept the three headers in any order within the header block of each
> message, and match their names case insensitively as RFC 5322
> specifies. The copy that git send-email --imap-sent-folder pipes to
> imap-send then passes the same check, so the special case added for it
> in 04133f5bc4 (send-email: add ability to send a copy of sent emails to
> an IMAP folder, 2025-08-12) is no longer needed.

Aren't you fixing two different issues at once? I'd argue that this
should be done in separate commits.

> diff --git a/imap-send.c b/imap-send.c
> index 6f76bade35..7ae2eeddc9 100644
> --- a/imap-send.c
> +++ b/imap-send.c
> @@ -1453,32 +1453,29 @@ static void wrap_in_html(struct strbuf *msg)
>  	*msg = buf;
>  }
>  
> +static bool has_required_headers(const char *line)
> +{
> +	bool from = false, date = false, subject = false;
> +
> +	while ((line = strchr(line, '\n')) && *++line != '\n') {
> +		if (istarts_with(line, "From: "))
> +			from = true;
> +		else if (istarts_with(line, "Date: "))
> +			date = true;
> +		else if (istarts_with(line, "Subject: "))
> +			subject = true;
> +	}
> +
> +	return from && date && subject;
> +}
> +
>  static int count_messages(struct strbuf *all_msgs)
>  {
>  	int count = 0;
>  	char *p = all_msgs->buf;
>  
>  	while (1) {
> -		if (starts_with(p, "From ")) {
> -			if (starts_with(p, "From git-send-email")) {
> -				p = strstr(p+5, "\nFrom: ");
> -				if (!p) break;
> -				p += 7;
> -				p = strstr(p, "\nTo: ");
> -				if (!p) break;
> -				p += 5;
> -				count++;
> -			} else {
> -				p = strstr(p+5, "\nFrom: ");
> -				if (!p) break;
> -				p = strstr(p+7, "\nDate: ");
> -				if (!p) break;
> -				p = strstr(p+7, "\nSubject: ");
> -				if (!p) break;
> -				p += 10;
> -				count++;
> -			}
> -		}
> +		if (starts_with(p, "From ") && has_required_headers(p))
> +			count++;

In the preimage we special-cased when the line starts with "From
git-send-email", and in that case we didn't recognize "Subject:" lines.
So you're not only changing that we now accept the headers in any
arbitrary order, but you also make us accept "Subject:" lines when we
saw "From git-send-email". You don't really explain why that change is
okay to do though.

> diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
> index d1393ef197..1f77c14315 100755
> --- a/t/t9001-send-email.sh
> +++ b/t/t9001-send-email.sh
> @@ -2863,4 +2863,39 @@ test_expect_success $PREREQ '--compose handles to headers' '
>  	test_cmp expect msgtxt2.to
>  '
>  
> +test_expect_success $PREREQ 'imap-send accepts a sent patch from the list archive' '

Quite weird that every single test carries this prerequisite. Makes me
wonder why we don't just skip all tests at once.

Patrick

  reply	other threads:[~2026-10-21  8:25 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-19 19:19 [PATCH 0/2] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-19 19:19 ` [PATCH 1/2] imap-send: avoid leaking the tunnel command Harald Nordgren via GitGitGadget
2026-10-19 19:19 ` [PATCH 2/2] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-19 22:00   ` Junio C Hamano
2026-10-20  7:28     ` Harald Nordgren
2026-10-21  7:07 ` [PATCH v2 0/2] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-21  7:07   ` [PATCH v2 1/2] imap-send: avoid leaking the tunnel command Harald Nordgren via GitGitGadget
2026-10-21  8:24     ` Patrick Steinhardt
2026-10-21  8:53       ` Harald Nordgren
2026-10-21  7:07   ` [PATCH v2 2/2] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-21  8:25     ` Patrick Steinhardt [this message]
2026-10-21  8:45       ` Harald Nordgren
2026-10-21  9:36         ` Patrick Steinhardt
2026-10-21  9:59           ` Harald Nordgren
2026-10-22  6:56 ` [PATCH v3 0/4] Fix imap-send with reordered message headers Harald Nordgren via GitGitGadget
2026-10-22  6:56   ` [PATCH v3 1/4] imap-send: wait for the tunnel command to finish Harald Nordgren via GitGitGadget
2026-10-22  6:56   ` [PATCH v3 2/4] imap-send: accept messages with Subject before Date Harald Nordgren via GitGitGadget
2026-10-22  6:56   ` [PATCH v3 3/4] imap-send: check git send-email copies like other messages Harald Nordgren via GitGitGadget
2026-10-22  6:56   ` [PATCH v3 4/4] imap-send: match header names case insensitively Harald Nordgren via GitGitGadget

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=ath23vYy0n8UFLUB@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=haraldnordgren@gmail.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 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.