Git development
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: "Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org,  Harald Nordgren <haraldnordgren@gmail.com>
Subject: Re: [PATCH] send-email: clarify missing subject error
Date: Sun, 09 Aug 2026 12:13:16 -0700	[thread overview]
Message-ID: <xmqqo6fb85v7.fsf@gitster.g> (raw)
In-Reply-To: <pull.2375.git.git.1786267394375.gitgitgadget@gmail.com> (Harald Nordgren via GitGitGadget's message of "Sun, 09 Aug 2026 09:23:14 +0000")

"Harald Nordgren via GitGitGadget" <gitgitgadget@gmail.com> writes:

> From: Harald Nordgren <haraldnordgren@gmail.com>
>
> Explain the required Subject: prefix when a message file has no subject.

Yes, get_patch_subject() is called from places where the caller
wants to determine whether the given file has at least one line that
begins with 'Subject:'.  In that case, the subroutine returns the
rest of that line; if it does not find any such line, it issues an
error message and dies.

As a side note, the check is curiously case-sensitive.  It is also
curious that the scanning does not stop at the first blank line that
terminates the email headers.  However, do not change this behavior
without studying the possible ramifications.  People have learned to
use various inputs that are not exactly what is output by 'git
format-patch', so rejecting a 'malformed' file simply because it
differs from typical 'git format-patch' output will break someone's
established workflow.

> Terminate the error with a newline so Perl does not append its internal
> source location.

Very nice spotting.  For an end-user facing script, the source
location is not useful.  The user is not debugging and fixing the
send-email script after all ;-).

> diff --git a/git-send-email.perl b/git-send-email.perl
> index bb8ddd1eef..4d76d53c49 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -863,7 +863,8 @@ sub get_patch_subject {
>  		return "GIT: $1\n";
>  	}
>  	close $fh;
> -	die sprintf(__("No subject line in %s?"), $fn);
> +	die sprintf(__("No subject line in %s. " .
> +		"The first line must start with \"Subject: \"\n"), $fn);
>  }

An input file to the 'git send-email' program is often the output
of 'git format-patch'.  Such a file begins with a UNIX 'From '
line, followed by email headers such as 'From:', 'Date:', and
'Subject:'.  The 'Subject:' line cannot be the first line of
the file in this case, yet it is a valid input.

The only condition that this subroutine flags as an error is when
the file lacks a subject line.  "No 'Subject:' line in '%s'\n" is a
clear message to display and is an improvement over the original.

However, the fact that the first line does not start with
"Subject:" is irrelevant to the basis of the subroutine's
decision to issue an error, I think.

Thanks.

  reply	other threads:[~2026-08-09 19:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-09  9:23 [PATCH] send-email: clarify missing subject error Harald Nordgren via GitGitGadget
2026-08-09 19:13 ` Junio C Hamano [this message]
2026-08-10  9:48   ` Harald Nordgren
2026-08-10 15:28     ` Junio C Hamano
2026-08-10 17:53 ` [PATCH v2] " Harald Nordgren via GitGitGadget
2026-08-10 21:09   ` Junio C Hamano

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=xmqqo6fb85v7.fsf@gitster.g \
    --to=gitster@pobox.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox