public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] format-patch: better commit list for cover letter
@ 2026-02-20 23:06 Mirko Faina
  2026-02-20 23:55 ` [RFC PATCH v2] " Mirko Faina
                   ` (5 more replies)
  0 siblings, 6 replies; 113+ messages in thread
From: Mirko Faina @ 2026-02-20 23:06 UTC (permalink / raw)
  To: git; +Cc: Mirko Faina

Often when sending patch series there's a need to clarify to the
reviewer what's the purpose of said series, since it might be difficult
to understand it from reading the commits messages one by one.

"git format-patch" provides the useful "--cover-letter" flag to declare
if we want it to generate a template for us to use. By default it will
generate a "git shortlog" of the changes, which developers find less
useful than they'd like, mainly because the shortlog groups commits by
author, and gives no obvious chronological order.

Teach the make_cover_letter() a better cover letter format to replace
the current. The format can be seen from the following example:

    [1/3] abcc234s: this is a summary
    [2/3] 73s84ns2: this is another summary

Signed-off-by: Mirko Faina <mroik@delayed.space>
---
This patch comes after a small off-topic[1] that discussed the
usefulness (or the lack thereof) of the current cover letter template.
This patch hopes to make a better format so that developers won't have
to make their own custom script to generate better info.

[1] https://lore.kernel.org/git/xmqqbjhjxp2d.fsf@gitster.g/

 builtin/log.c | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/builtin/log.c b/builtin/log.c
index c1cd3999a7..4fea895527 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -30,7 +30,6 @@
 #include "reflog-walk.h"
 #include "patch-ids.h"
 #include "path.h"
-#include "shortlog.h"
 #include "remote.h"
 #include "string-list.h"
 #include "parse-options.h"
@@ -40,6 +39,8 @@
 #include "mailmap.h"
 #include "progress.h"
 #include "commit-slab.h"
+#include "pretty.h"
+#include "strbuf.h"
 
 #include "commit-reach.h"
 #include "range-diff.h"
@@ -1324,6 +1325,29 @@ static void get_notes_args(struct strvec *arg, struct rev_info *rev)
 	}
 }
 
+static void generate_cover_commit_list(FILE *cover_file, struct commit** list, int nr)
+{
+	char* commit_hash_buf = malloc(GIT_MAX_HEXSZ + 1);
+	struct strbuf *sb_loglines = malloc(sizeof(struct strbuf));
+	int temp;
+
+	for (int i = 0; i < nr; i++) {
+		strbuf_init(sb_loglines, 0);
+		strbuf_addf(sb_loglines, "[%0*d/%d] ", decimal_width(nr), i + 1, nr);
+		temp = sb_loglines->len;
+		strbuf_addstr(sb_loglines, oid_to_hex_r(commit_hash_buf, &list[i]->object.oid));
+		strbuf_addch(sb_loglines, ':');
+		strbuf_remove(sb_loglines, temp, sb_loglines->len - temp - 8);
+		strbuf_addch(sb_loglines, ' ');
+		pp_commit_easy(CMIT_FMT_ONELINE, list[i], sb_loglines);
+		fprintf(cover_file, "%s\n", sb_loglines->buf);
+	}
+
+	fprintf(cover_file, "\n");
+	strbuf_release(sb_loglines);
+	free(commit_hash_buf);
+}
+
 static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 			      struct commit *origin,
 			      int nr, struct commit **list,
@@ -1333,7 +1357,6 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 			      const struct format_config *cfg)
 {
 	const char *from;
-	struct shortlog log;
 	struct strbuf sb = STRBUF_INIT;
 	int i;
 	const char *encoding = "UTF-8";
@@ -1377,18 +1400,7 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 	free(pp.after_subject);
 	strbuf_release(&sb);
 
-	shortlog_init(&log);
-	log.wrap_lines = 1;
-	log.wrap = MAIL_DEFAULT_WRAP;
-	log.in1 = 2;
-	log.in2 = 4;
-	log.file = rev->diffopt.file;
-	log.groups = SHORTLOG_GROUP_AUTHOR;
-	shortlog_finish_setup(&log);
-	for (i = 0; i < nr; i++)
-		shortlog_add_commit(&log, list[i]);
-
-	shortlog_output(&log);
+	generate_cover_commit_list(rev->diffopt.file, list, nr);
 
 	/* We can only do diffstat with a unique reference point */
 	if (origin)

base-commit: a8e89346a7731cb3104010f322c65e2a0c922618
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 113+ messages in thread

end of thread, other threads:[~2026-03-13 20:22 UTC | newest]

Thread overview: 113+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox