[PATCH v3 2/4] imap-send: accept messages with Subject before Date
- From
Harald Nordgren via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Oct 22, 2026, 06:56 UTC
- Message-ID
- <38214d9abf62fa4f8d179ce15e633aa1157ae3e3.1792652185.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2456.v3.git.git.1792652185.gitgitgadget@gmail.com>
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.
Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> --- imap-send.c | 24 ++++++++++++++++-------- t/t9001-send-email.sh | 22 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/imap-send.c b/imap-send.c index fa326c4ae2..ce2321d42e 100644 --- a/imap-send.c +++ b/imap-send.c @@ -1456,6 +1456,21 @@ 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 (starts_with(line, "From: ")) + from = true; + else if (starts_with(line, "Date: ")) + date = true; + else if (starts_with(line, "Subject: ")) + subject = true; + } + return from && date && subject; +} + static int count_messages(struct strbuf *all_msgs) { int count = 0; @@ -1471,14 +1486,7 @@ static int count_messages(struct strbuf *all_msgs) 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; + } else if (has_required_headers(p)) { count++; } } diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index d1393ef197..d105fcb41c 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -2863,4 +2863,26 @@ 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' ' + write_script fake-imap-server <<-\EOF && + printf "* PREAUTH [CAPABILITY IMAP4rev1 LITERAL+] ready\r\n" + printf "1 OK\r\n2 OK\r\n3 OK\r\n" + cat >/dev/null + EOF + test_config imap.tunnel ./fake-imap-server && + clean_fake_sendmail && + git send-email \ + --from="Example <from@example.com>" \ + --to=nobody@example.com \ + --smtp-server="$(pwd)/fake.sendmail" \ + HEAD^ && + { + echo "From mboxrd@z Thu Jan 1 00:00:00 1970" && + cat msgtxt1 + } >archive.mbox && + git imap-send --folder=INBOX <archive.mbox 2>err && + test_grep "^Sending 1 message to INBOX folder" err && + test_grep "(1/1) done" err +' + test_done
-- gitgitgadget