public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: Mirko Faina <mroik@delayed•space>
To: git@vger•kernel.org
Cc: Mirko Faina <mroik@delayed•space>
Subject: [PATCH 7/7] format-patch: --commit-list-format without prefix
Date: Sun, 15 Mar 2026 00:20:50 +0100	[thread overview]
Message-ID: <aa7802b653a44838ef78f5ae4a82b341c9853b33.1773530191.git.mroik@delayed.space> (raw)
In-Reply-To: <cover.1773530191.git.mroik@delayed.space>

Having to prefix a custom format-string with "log:" when passed from the
cli interface can be annoying for many users. It would be great if it
could be dropped an it were still accepted.

Teach make_cover_letter() to accept custom format-strings if a
placeholder is detected.

Note that both here and in "git log --format" the check is done naively
by just checking for the presence of a '%'.

Signed-off-by: Mirko Faina <mroik@delayed•space>
---
 Documentation/git-format-patch.adoc |  4 +++-
 builtin/log.c                       |  2 ++
 t/t4014-format-patch.sh             | 24 ++++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/Documentation/git-format-patch.adoc b/Documentation/git-format-patch.adoc
index 55cc680685..c52dbcc170 100644
--- a/Documentation/git-format-patch.adoc
+++ b/Documentation/git-format-patch.adoc
@@ -326,8 +326,10 @@ feeding the result to `git send-email`.
 --commit-list-format=<format-spec>::
 	Specify the format in which to generate the commit list of the patch
 	series. The accepted values for format-spec are `shortlog`, `modern` or a
-	format string prefixed with `log:`.
+	format-string prefixed with `log:`.
 	e.g. `log: %s (%an)`
+	The user is allowed to drop the prefix if the format-string contains a
+	`%<placeholder>`.
 	If not given, defaults to the `format.commitListFormat` configuration
 	variable.
 	This option implies the use of `--cover-letter` unless
diff --git a/builtin/log.c b/builtin/log.c
index c6cf04350a..ad7b7215fe 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1448,6 +1448,8 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 	else if (!strcmp(format, "modern"))
 		generate_commit_list_cover(rev->diffopt.file, "[%(count)/%(total)] %s",
 					   list, nr);
+	else if (strchr(format, '%'))
+		generate_commit_list_cover(rev->diffopt.file, format, list, nr);
 	else
 		die(_("'%s' is not a valid format string"), format);
 
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 7571cc582b..7517094bd6 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -392,6 +392,30 @@ test_expect_success 'cover letter with subject, author and count' '
 	test_grep "^\[1/1\] This is a subject (A U Thor)$" patches/0000-cover-letter.patch
 '
 
+test_expect_success 'cover letter with custom format no prefix' '
+	rm -rf patches &&
+	test_when_finished "git reset --hard HEAD~1" &&
+	test_when_finished "rm -rf patches test_file" &&
+	touch test_file &&
+	git add test_file &&
+	git commit -m "This is a subject" &&
+	git format-patch --commit-list-format="[%(count)/%(total)] %s (%an)" \
+	-o patches HEAD~1 &&
+	test_grep "^\[1/1\] This is a subject (A U Thor)$" patches/0000-cover-letter.patch
+'
+
+test_expect_success 'cover letter fail when no prefix and no placeholder' '
+	rm -rf patches &&
+	test_when_finished "git reset --hard HEAD~1" &&
+	test_when_finished "rm -rf patches test_file err" &&
+	touch test_file &&
+	git add test_file &&
+	git commit -m "This is a subject" &&
+	test_must_fail git format-patch --commit-list-format="this should fail" \
+	-o patches HEAD~1 2>err &&
+	test_grep "is not a valid format string" err
+'
+
 test_expect_success 'cover letter modern format' '
 	test_when_finished "git reset --hard HEAD~1" &&
 	test_when_finished "rm -rf patches test_file" &&
-- 
2.53.0.959.g497ff81fa9


  parent reply	other threads:[~2026-03-14 23:21 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-14 23:20 [PATCH 0/7] improve "git format-patch --commit-list-format" Mirko Faina
2026-03-14 23:20 ` [PATCH 1/7] pretty.c: better die message %(count) and %(total) Mirko Faina
2026-03-14 23:20 ` [PATCH 2/7] format-patch: refactor generate_commit_list_cover Mirko Faina
2026-03-14 23:20 ` [PATCH 3/7] format-patch: rename --cover-letter-format option Mirko Faina
2026-03-14 23:20 ` [PATCH 4/7] format.commitListFormat: strip meaning from empty Mirko Faina
2026-03-14 23:20 ` [PATCH 5/7] format-patch: wrap generate_commit_list_cover() Mirko Faina
2026-03-17 15:32   ` Kristoffer Haugsbakk
2026-03-17 16:18     ` Mirko Faina
2026-03-14 23:20 ` [PATCH 6/7] format-patch: add preset for --commit-list-format Mirko Faina
2026-03-14 23:20 ` Mirko Faina [this message]
2026-03-17 15:29   ` [PATCH 7/7] format-patch: --commit-list-format without prefix Kristoffer Haugsbakk
2026-03-17 16:20     ` Mirko Faina
2026-03-19 22:38 ` [PATCH v2 0/8] improve "git format-patch --commit-list-format" Mirko Faina
2026-03-19 22:38   ` [PATCH v2 1/8] pretty.c: better die message %(count) and %(total) Mirko Faina
2026-03-19 22:38   ` [PATCH v2 2/8] format-patch: refactor generate_commit_list_cover Mirko Faina
2026-03-19 22:38   ` [PATCH v2 3/8] format-patch: rename --cover-letter-format option Mirko Faina
2026-03-19 22:38   ` [PATCH v2 4/8] docs/pretty-formats: add %(count) and %(total) Mirko Faina
2026-03-23 10:29     ` Kristoffer Haugsbakk
2026-03-23 14:00       ` Mirko Faina
2026-03-19 22:38   ` [PATCH v2 5/8] format.commitListFormat: strip meaning from empty Mirko Faina
2026-03-19 22:38   ` [PATCH v2 6/8] format-patch: wrap generate_commit_list_cover() Mirko Faina
2026-03-19 22:38   ` [PATCH v2 7/8] format-patch: add preset for --commit-list-format Mirko Faina
2026-03-19 22:38   ` [PATCH v2 8/8] format-patch: --commit-list-format without prefix Mirko Faina
2026-03-23 16:57   ` [PATCH v3 0/8] improve "git format-patch --commit-list-format" Mirko Faina
2026-03-23 16:57     ` [PATCH v3 1/8] pretty.c: better die message %(count) and %(total) Mirko Faina
2026-03-23 16:57     ` [PATCH v3 2/8] format-patch: refactor generate_commit_list_cover Mirko Faina
2026-03-23 16:57     ` [PATCH v3 3/8] format-patch: rename --cover-letter-format option Mirko Faina
2026-03-23 16:57     ` [PATCH v3 4/8] docs/pretty-formats: add %(count) and %(total) Mirko Faina
2026-03-23 16:57     ` [PATCH v3 5/8] format.commitListFormat: strip meaning from empty Mirko Faina
2026-03-23 16:57     ` [PATCH v3 6/8] format-patch: wrap generate_commit_list_cover() Mirko Faina
2026-03-23 16:57     ` [PATCH v3 7/8] format-patch: add preset for --commit-list-format Mirko Faina
2026-03-23 16:57     ` [PATCH v3 8/8] format-patch: --commit-list-format without prefix Mirko Faina
2026-03-23 20:10     ` [PATCH v3 0/8] improve "git format-patch --commit-list-format" Junio C Hamano
2026-03-24 16:19       ` Kristoffer Haugsbakk
2026-03-26 14:29       ` Phillip Wood
2026-03-26 16:37         ` Junio C Hamano
2026-03-27  1:13           ` Mirko Faina
2026-03-27 16:04             ` Junio C Hamano
2026-03-27 16:18               ` Mirko Faina
2026-03-27 16:47                 ` Junio C Hamano
2026-03-26 16:34     ` D. Ben Knoble
2026-03-26 17:15       ` 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=aa7802b653a44838ef78f5ae4a82b341c9853b33.1773530191.git.mroik@delayed.space \
    --to=mroik@delayed$(echo .)space \
    --cc=git@vger$(echo .)kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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