From: Mirko Faina <mroik@delayed•space>
To: git@vger•kernel.org
Cc: Mirko Faina <mroik@delayed•space>,
Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail•com>
Subject: [PATCH v2 8/8] format-patch: --commit-list-format without prefix
Date: Thu, 19 Mar 2026 23:38:18 +0100 [thread overview]
Message-ID: <ef0d3ed876d210503c85a547b8d7e78bdbd8f32a.1773959395.git.mroik@delayed.space> (raw)
In-Reply-To: <cover.1773959395.git.mroik@delayed.space>
Having to prefix a custom format-string with "log:" when passed from the
CLI can be annoying. It would be great if this prefix wasn't required.
Teach make_cover_letter() to accept custom format-strings without the
"log:" prefix 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.1018.g2bb0e51243
next prev parent reply other threads:[~2026-03-19 22:38 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 ` [PATCH 7/7] format-patch: --commit-list-format without prefix Mirko Faina
2026-03-17 15:29 ` 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 ` Mirko Faina [this message]
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=ef0d3ed876d210503c85a547b8d7e78bdbd8f32a.1773959395.git.mroik@delayed.space \
--to=mroik@delayed$(echo .)space \
--cc=git@vger$(echo .)kernel.org \
--cc=kristofferhaugsbakk@fastmail$(echo .)com \
/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