]> git.ipfire.org Git - thirdparty/git.git/commitdiff
format-patch: add preset for --commit-list-format
authorMirko Faina <mroik@delayed.space>
Mon, 23 Mar 2026 16:57:34 +0000 (17:57 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Mar 2026 20:06:59 +0000 (13:06 -0700)
"git format-patch --commit-list-format" enables the user to make their
own format for the commit list in the cover letter. It would be nice to
have a ready to use format to replace shortlog.

Teach make_cover_letter() the "modern" format preset.
This new format is the same as: "log:[%(count)/%(total)] %s".

Signed-off-by: Mirko Faina <mroik@delayed.space>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/format.adoc
Documentation/git-format-patch.adoc
builtin/log.c
t/t4014-format-patch.sh

index ea5ec5df7a2aee013e9ad9a9509aba5ef43af68d..ef1ed1d2507fcf3b57cf3ece7017c4212cefd31c 100644 (file)
@@ -104,7 +104,7 @@ format.coverLetter::
 format.commitListFormat::
        When the `--cover-letter-format` option is not given, `format-patch`
        uses the value of this variable to decide how to format the title of
-       each commit. Default to `shortlog`.
+       each commit. Defaults to `shortlog`.
 
 format.outputDirectory::
        Set a custom directory to store the resulting files instead of the
index 45ca72e6703cffb17bc02902d60d7b35d801e030..55cc68068527e1a361918ac7ef6ec6c52bd7e8b9 100644 (file)
@@ -325,8 +325,8 @@ 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" or a format
-       string prefixed with `log:`.
+       series. The accepted values for format-spec are `shortlog`, `modern` or a
+       format string prefixed with `log:`.
        e.g. `log: %s (%an)`
        If not given, defaults to the `format.commitListFormat` configuration
        variable.
index d1765ce4ad71c1d451e79d0706d0314aab6fe745..c6cf04350a9a38ae14cf8fed1bd2437fecf04945 100644 (file)
@@ -1445,6 +1445,9 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
                generate_commit_list_cover(rev->diffopt.file, format, list, nr);
        else if (!strcmp(format, "shortlog"))
                generate_shortlog_cover_letter(&log, rev, list, nr);
+       else if (!strcmp(format, "modern"))
+               generate_commit_list_cover(rev->diffopt.file, "[%(count)/%(total)] %s",
+                                          list, nr);
        else
                die(_("'%s' is not a valid format string"), format);
 
index ca37f40a6a180a3ec3418d36c7deaa984a32adb9..7571cc582b338508426e998c10585733372c9e9a 100755 (executable)
@@ -392,18 +392,17 @@ 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 author and count' '
+test_expect_success 'cover letter modern format' '
        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="log:[%(count)/%(total)] %an" \
-       -o patches HEAD~1 &&
-       test_grep "^\[1/1\] A U Thor$" patches/0000-cover-letter.patch
+       git format-patch --commit-list-format="modern" -o patches HEAD~1 &&
+       test_grep "^\[1/1\] This is a subject$" patches/0000-cover-letter.patch
 '
 
-test_expect_success 'cover letter shortlog' '
+test_expect_success 'cover letter shortlog format' '
        test_when_finished "git reset --hard HEAD~1" &&
        test_when_finished "rm -rf expect patches result test_file" &&
        cat >expect <<-"EOF" &&
@@ -451,6 +450,17 @@ test_expect_success 'cover letter config with count and author' '
        test_line_count = 2 result
 '
 
+test_expect_success 'cover letter config commitlistformat set to modern' '
+       test_when_finished "rm -rf patches result" &&
+       test_when_finished "git config unset format.coverletter" &&
+       test_when_finished "git config unset format.commitlistformat" &&
+       git config set format.coverletter true &&
+       git config set format.commitlistformat modern &&
+       git format-patch -o patches HEAD~2 &&
+       grep -E "^[[[:digit:]]+/[[:digit:]]+] .*$" patches/0000-cover-letter.patch >result &&
+       test_line_count = 2 result
+'
+
 test_expect_success 'cover letter config commitlistformat set to shortlog' '
        test_when_finished "rm -rf patches result" &&
        test_when_finished "git config unset format.coverletter" &&