public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Mirko Faina <mroik@delayed.space>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH v2 1/2] format-patch: add ability to use alt cover format
Date: Wed, 25 Feb 2026 08:47:08 -0500	[thread overview]
Message-ID: <20260225134708.GC2139176@coredump.intra.peff.net> (raw)
In-Reply-To: <aZ4v6p_oKCayr9A7@exploit>

On Wed, Feb 25, 2026 at 12:54:54AM +0100, Mirko Faina wrote:

> > So a single commit_line is given to repo_format_commit_message()
> > repeatedly to accumulate those lines in it, which makes sense.
> > 
> > We prepare pretty_print_context once above and feed it repeatedly to
> > repo_format_commit_message()---is that intended?  Not a rhetorical
> > question; I do not know the answer.  I guess some existing callers
> > (like builtin/archive.c) do reuse the structure when making multiple
> > calls to the function, so this would be kosher, perhaps?
> 
> Honestly I applied Jeff change trusting his knowledge of the pretty.c
> code. After taking a better look at repo_format_commit_message(), after
> the pretty_print_context is passed to a format_commit_context as
> pretty_ctx, it doesn't seem like this value is modified at all thoughout
> the call. So it should be ok to reuse the same structure in multiple
> calls of repo_format_commit_message().

A dangerous place to put your trust. ;)

I do think it is OK here, though. And in general I'd assume a "context"
variable like this is re-usable unless documented differently. The
shortlog does use a pretty_print_context in a loop like this, too.

> > > +	if (cover_letter && !cover_letter_fmt)
> > > +		cover_letter_fmt = "shortlog";
> > > +
> > 
> > I do not quite see the point of doing this.  There is no law that
> > "cover_letter_fmt != NULL" is a crime when cover_letter is false.
> > 
> > cover_letter_fmt can be initialized to a fixed string "shortlog",
> > and nobody cares what random value cover_letter_fmt has when
> > cover_letter is false.
> 
> Indeed, was the first thing that came to mind at the time. Had I had
> reread a few more times before sending I probably wouldn't have left it
> like this.
> 
> I'll try to take my time with the next version as to not waste your time
> on unnecessary initialization trivialities.

I think that is OK, but FWIW my instinct on reading the patch was to go
the opposite direction: leave it as NULL and fill that in as the default
at the last minute. Like this (on top of your patch 1):

diff --git a/builtin/log.c b/builtin/log.c
index d13fcf830b..6907a680f2 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1360,8 +1360,6 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 	struct commit *head = list[0];
 	char *to_free = NULL;
 
-	assert(format);
-
 	if (!cmit_fmt_is_mail(rev->commit_format))
 		die(_("cover letter needs email format"));
 
@@ -1397,7 +1395,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 	free(pp.after_subject);
 	strbuf_release(&sb);
 
-	if (skip_prefix(format, "log:", &format)) {
+	if (format && skip_prefix(format, "log:", &format)) {
 		generate_commit_list_cover(rev->diffopt.file, format, list, nr);
 	} else {
 		shortlog_init(&log);
@@ -2404,9 +2402,6 @@ int cmd_format_patch(int argc,
 	rev.numbered_files = just_numbers;
 	rev.patch_suffix = fmt_patch_suffix;
 
-	if (cover_letter && !cover_letter_fmt)
-		cover_letter_fmt = "shortlog";
-
 	if (cover_letter) {
 		if (cfg.thread)
 			gen_message_id(&rev, "cover");

I tend to like keeping the sentinel value as long as possible, because
sometimes it later becomes useful to distinguish "the user asked for
shortlog" vs "the user did not ask for anything". We don't need that
now, but I could imagine some hypothetical future where we are going to
switch the default, and start issuing an advice/warning message.

But it is a pretty minor point, and mostly subjective, so I am happy
either way.

However, the patch above does raise another interesting question if you
look closely: why do we never need to check for the string "shortlog" in
this logic?

We just assume anything that does not start with "log:" should show the
shortlog, and that is true both before and after my suggested change
above. What should:

  git format-patch --cover-letter --cover-letter-format=foo

do? With "log:%s" as the syntax, it should probably be an error. And
this seems like a good place to detect it, like:

  if (!format || !strcmp(format, "shortlog"))
	...do shortlog...
  else if (skip_prefix(format, "log:", &format))
	...do format...
  else
	die("what the heck does %s mean?", format);

But that gives me more thoughts (another dangerous habit, I know). Do we
need "log:" at all? Could the value be interpreted as a format, unless
it is the string "shortlog"? We would want to leave room for future
expansion of new hard-coded names (like "shortlog"), but I do not think
there is any problem there. Any reasonable format provided by the user
will have at least one %-placeholder in it, and no hard-coded name we
provide would have a percent in it.

And then you could just do:

  git format-patch --cover-letter --cover-letter-format=%s

Maybe not a big deal, as I'd expect everyone to set it once in config
(or within a script) anyway. But food for thought.

-Peff

  parent reply	other threads:[~2026-02-25 13:47 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-20 23:06 [RFC PATCH] format-patch: better commit list for cover letter Mirko Faina
2026-02-20 23:55 ` [RFC PATCH v2] " Mirko Faina
2026-02-21  0:51   ` Mirko Faina
2026-02-21  4:54 ` [RFC PATCH] " Junio C Hamano
2026-02-21  5:18   ` Mirko Faina
2026-02-21  5:55     ` Junio C Hamano
2026-02-21  6:02       ` Junio C Hamano
2026-02-21 15:59         ` Mirko Faina
2026-02-21 17:33           ` Junio C Hamano
2026-02-21 19:16             ` Mirko Faina
2026-02-24  4:03 ` [PATCH 0/3] format-patch: add cover-letter-format option Mirko Faina
2026-02-24  4:06   ` Mirko Faina
2026-02-24  9:29   ` [PATCH v2 0/2] " Mirko Faina
2026-02-24  9:29     ` [PATCH v2 1/2] format-patch: add ability to use alt cover format Mirko Faina
2026-02-24 17:40       ` Junio C Hamano
2026-02-24 23:54         ` Mirko Faina
2026-02-25  0:29           ` Junio C Hamano
2026-02-25 13:47           ` Jeff King [this message]
2026-02-24 20:25       ` Junio C Hamano
2026-02-25 13:56       ` Jeff King
2026-02-25 22:55         ` Mirko Faina
2026-02-24  9:29     ` [PATCH v2 2/2] format-patch: add commitListFormat config Mirko Faina
2026-02-24 18:07       ` Junio C Hamano
2026-02-25  0:14         ` Mirko Faina
2026-02-25 17:25           ` Junio C Hamano
2026-02-26 21:40           ` Mirko Faina
2026-02-26 22:19             ` Junio C Hamano
2026-02-24 20:38     ` [PATCH v2 0/2] format-patch: add cover-letter-format option Junio C Hamano
2026-02-24 21:39       ` Junio C Hamano
2026-02-25  0:19         ` Mirko Faina
2026-02-25  2:46           ` Junio C Hamano
2026-02-27  1:52     ` [PATCH v3 0/4] " Mirko Faina
2026-02-27  1:52       ` [PATCH v3 1/4] pretty.c: add %(count) and %(total) placeholders Mirko Faina
2026-02-27  1:52       ` [PATCH v3 2/4] format-patch: move cover letter summary generation Mirko Faina
2026-02-27  1:52       ` [PATCH v3 3/4] format-patch: add ability to use alt cover format Mirko Faina
2026-02-27  4:23         ` Junio C Hamano
2026-02-27 12:41           ` Mirko Faina
2026-02-27  1:52       ` [PATCH v3 4/4] format-patch: add commitListFormat config Mirko Faina
2026-02-27 13:18       ` [PATCH v4 0/4] format-patch: add cover-letter-format option Mirko Faina
2026-02-27 13:18         ` [PATCH v4 1/4] pretty.c: add %(count) and %(total) placeholders Mirko Faina
2026-02-27 13:18         ` [PATCH v4 2/4] format-patch: move cover letter summary generation Mirko Faina
2026-02-27 13:18         ` [PATCH v4 3/4] format-patch: add ability to use alt cover format Mirko Faina
2026-02-27 13:18         ` [PATCH v4 4/4] format-patch: add commitListFormat config Mirko Faina
2026-02-27 16:42           ` [PATCH v4 5/4] docs: add usage for the cover-letter fmt feature Mirko Faina
2026-02-27 17:51           ` [PATCH v4 4/4] format-patch: add commitListFormat config Junio C Hamano
2026-02-27 21:51             ` Mirko Faina
2026-02-27 22:21               ` Junio C Hamano
2026-02-27 22:48         ` [PATCH v5 0/5] format-patch: add cover-letter-format option Mirko Faina
2026-02-27 22:48           ` [PATCH v5 1/5] pretty.c: add %(count) and %(total) placeholders Mirko Faina
2026-02-27 22:48           ` [PATCH v5 2/5] format-patch: move cover letter summary generation Mirko Faina
2026-02-27 22:48           ` [PATCH v5 3/5] format-patch: add ability to use alt cover format Mirko Faina
2026-02-27 22:48           ` [PATCH v5 4/5] format-patch: add commitListFormat config Mirko Faina
2026-02-27 22:48           ` [PATCH v5 5/5] docs: add usage for the cover-letter fmt feature Mirko Faina
2026-03-06 22:33           ` [PATCH v5 0/5] format-patch: add cover-letter-format option Junio C Hamano
2026-03-06 22:49             ` Mirko Faina
2026-03-06 22:58           ` [PATCH v6 " Mirko Faina
2026-03-06 22:58             ` [PATCH v6 1/5] pretty.c: add %(count) and %(total) placeholders Mirko Faina
2026-03-06 22:58             ` [PATCH v6 2/5] format-patch: move cover letter summary generation Mirko Faina
2026-03-06 22:58             ` [PATCH v6 3/5] format-patch: add ability to use alt cover format Mirko Faina
2026-03-10 22:14               ` Junio C Hamano
2026-03-10 22:32                 ` Mirko Faina
2026-03-06 22:58             ` [PATCH v6 4/5] format-patch: add commitListFormat config Mirko Faina
2026-03-06 22:58             ` [PATCH v6 5/5] docs: add usage for the cover-letter fmt feature Mirko Faina
2026-03-06 23:18               ` Junio C Hamano
2026-03-06 23:34             ` [PATCH v7 0/5] format-patch: add cover-letter-format option Mirko Faina
2026-03-06 23:34               ` [PATCH v7 1/5] pretty.c: add %(count) and %(total) placeholders Mirko Faina
2026-03-10 14:32                 ` Phillip Wood
2026-03-10 20:55                   ` Mirko Faina
2026-03-06 23:34               ` [PATCH v7 2/5] format-patch: move cover letter summary generation Mirko Faina
2026-03-06 23:34               ` [PATCH v7 3/5] format-patch: add ability to use alt cover format Mirko Faina
2026-03-10 14:33                 ` Phillip Wood
2026-03-10 21:05                   ` Mroik
2026-03-06 23:34               ` [PATCH v7 4/5] format-patch: add commitListFormat config Mirko Faina
2026-03-10 14:34                 ` Phillip Wood
2026-03-10 16:45                   ` Junio C Hamano
2026-03-10 21:23                     ` Mirko Faina
2026-03-11 10:38                       ` Phillip Wood
2026-03-11 17:13                         ` Junio C Hamano
2026-03-11 10:32                     ` Phillip Wood
2026-03-11 17:18                       ` Junio C Hamano
2026-03-10 21:19                   ` Mirko Faina
2026-03-06 23:34               ` [PATCH v7 5/5] docs: add usage for the cover-letter fmt feature Mirko Faina
2026-03-10  9:51                 ` Bert Wesarg
2026-03-10 14:34                 ` Phillip Wood
2026-03-12 16:20               ` [PATCH v8 0/4] format-patch: add cover-letter-format option Mirko Faina
2026-03-12 16:20                 ` [PATCH v8 1/4] format-patch: move cover letter summary generation Mirko Faina
2026-03-12 16:28                   ` Junio C Hamano
2026-03-12 16:20                 ` [PATCH v8 2/4] format-patch: add ability to use alt cover format Mirko Faina
2026-03-12 16:52                   ` Junio C Hamano
2026-03-12 17:18                     ` Mirko Faina
2026-03-12 17:25                       ` Junio C Hamano
2026-03-12 17:27                         ` Junio C Hamano
2026-03-13 10:38                         ` Phillip Wood
2026-03-13 17:20                           ` Junio C Hamano
2026-03-13 19:17                             ` Mirko Faina
2026-03-13 20:22                               ` Junio C Hamano
2026-03-12 16:20                 ` [PATCH v8 3/4] format-patch: add "chronological" format for cover Mirko Faina
2026-03-12 16:55                   ` Junio C Hamano
2026-03-12 16:20                 ` [PATCH v8 4/4] format-patch: add commitListFormat config Mirko Faina
2026-03-12 17:00                   ` Junio C Hamano
2026-03-12 17:20                 ` [PATCH v8 0/4] format-patch: add cover-letter-format option Junio C Hamano
2026-03-12 17:45                   ` Mirko Faina
2026-03-12 18:12                     ` Junio C Hamano
2026-02-24  4:03 ` [PATCH 1/3] pretty.c: fix null pointer dereference Mirko Faina
2026-02-24  6:25   ` Junio C Hamano
2026-02-24  7:08     ` Mirko Faina
2026-02-24  7:43       ` Mirko Faina
2026-02-24  8:41       ` Jeff King
2026-02-24  4:03 ` [PATCH 2/3] format-patch: add ability to use alt cover format Mirko Faina
2026-02-24  9:02   ` Jeff King
2026-02-24  9:09     ` Mirko Faina
2026-02-24  9:18       ` Jeff King
2026-02-24  4:03 ` [PATCH 3/3] format-patch: add commitListFormat config Mirko Faina

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=20260225134708.GC2139176@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=mroik@delayed.space \
    /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