git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 2/4] ident: move commit_rewrite_person() to ident.c

From
Siddharth Asthana <siddharthasthana31@gmail.com>
Date
Jul 9, 2022, 15:41 UTC
Message-ID
<20220709154149.165524-3-siddharthasthana31@gmail.com>
In-Reply-To
<20220709154149.165524-1-siddharthasthana31@gmail.com>

commit_rewrite_person() and rewrite_ident_line() are static functions defined in revision.c.

Their usages are as follows:
- commit_rewrite_person() takes a commit buffer and replaces the author
  and committer idents with their canonical versions using the mailmap
  mechanism
- rewrite_ident_line() takes author/committer header lines from the
  commit buffer and replaces the idents with their canonical versions
  using the mailmap mechanism.

This patch moves commit_rewrite_person() and rewrite_ident_line() to ident.c which contains many other functions related to idents like split_ident_line(). By moving commit_rewrite_person() to ident.c, we also intend to use it in git-cat-file to replace committer and author idents from the headers to their canonical versions using the mailmap mechanism. The function is moved as is for now to make it clear that there are no other changes, but it will be renamed in a following commit.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: John Cai <johncai86@gmail.com>
Signed-off-by: Siddharth Asthana <siddharthasthana31@gmail.com>
---
 cache.h    |  6 +++++
 ident.c    | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 revision.c | 72 ------------------------------------------------------
 3 files changed, 78 insertions(+), 72 deletions(-)
diff --git a/cache.h b/cache.h
index ac5ab4ef9d..c9dbe1c29a 100644
--- a/cache.h
+++ b/cache.h
@@ -1688,6 +1688,12 @@ struct ident_split {
  */
 int split_ident_line(struct ident_split *, const char *, int);
 
+/*
+ * Given a commit object buffer and the commit headers, replaces the idents
+ * in the headers with their canonical versions using the mailmap mechanism.
+ */
+void commit_rewrite_person(struct strbuf *buf, const char **commit_headers, struct string_list *mailmap);
+
 /*
  * Compare split idents for equality or strict ordering. Note that we
  * compare only the ident part of the line, ignoring any timestamp.
diff --git a/ident.c b/ident.c
index 89ca5b4700..9f4f6e9071 100644
--- a/ident.c
+++ b/ident.c
@@ -8,6 +8,7 @@
 #include "cache.h"
 #include "config.h"
 #include "date.h"
+#include "mailmap.h"
 
 static struct strbuf git_default_name = STRBUF_INIT;
 static struct strbuf git_default_email = STRBUF_INIT;
@@ -346,6 +347,77 @@ int split_ident_line(struct ident_split *split, const char *line, int len)
 	return 0;
 }
 
+/*
+ * Returns the difference between the new and old length of the ident line.
+ */
+static ssize_t rewrite_ident_line(const char* person, struct strbuf *buf, struct string_list *mailmap)
+{
+	char *endp;
+	size_t len, namelen, maillen;
+	const char *name;
+	const char *mail;
+	struct ident_split ident;
+
+	endp = strchr(person, '\n');
+	if (!endp)
+		return 0;
+
+	len = endp - person;
+
+	if (split_ident_line(&ident, person, len))
+		return 0;
+
+	mail = ident.mail_begin;
+	maillen = ident.mail_end - ident.mail_begin;
+	name = ident.name_begin;
+	namelen = ident.name_end - ident.name_begin;
+
+	if (map_user(mailmap, &mail, &maillen, &name, &namelen)) {
+		struct strbuf namemail = STRBUF_INIT;
+		size_t newlen;
+
+		strbuf_addf(&namemail, "%.*s <%.*s>",
+			    (int)namelen, name, (int)maillen, mail);
+
+		strbuf_splice(buf, ident.name_begin - buf->buf,
+			      ident.mail_end - ident.name_begin + 1,
+			      namemail.buf, namemail.len);
+
+		newlen = namemail.len;
+
+		strbuf_release(&namemail);
+
+		return newlen - (ident.mail_end - ident.name_begin + 1);
+	}
+
+	return 0;
+}
+
+void commit_rewrite_person(struct strbuf *buf, const char **headers, struct string_list *mailmap)
+{
+	size_t buf_offset = 0;
+
+	if (!mailmap)
+		return;
+
+	for (;;) {
+		const char *person, *line;
+		size_t i, linelen;
+
+		line = buf->buf + buf_offset;
+		linelen = strchrnul(line, '\n') - line + 1;
+
+		if (linelen <= 1)
+			/* End of header */
+			return;
+
+		buf_offset += linelen;
+
+		for (i = 0; headers[i]; i++)
+			if (skip_prefix(line, headers[i], &person))
+				buf_offset += rewrite_ident_line(person, buf, mailmap);
+	}
+}
 
 static void ident_env_hint(enum want_ident whose_ident)
 {
diff --git a/revision.c b/revision.c
index 1939c56c67..14dca903b6 100644
--- a/revision.c
+++ b/revision.c
@@ -3755,78 +3755,6 @@ int rewrite_parents(struct rev_info *revs, struct commit *commit,
 	return 0;
 }
 
-/*
- * Returns the difference between the new and old length of the ident line.
- */
-static ssize_t rewrite_ident_line(const char* person, struct strbuf *buf, struct string_list *mailmap)
-{
-	char *endp;
-	size_t len, namelen, maillen;
-	const char *name;
-	const char *mail;
-	struct ident_split ident;
-
-	endp = strchr(person, '\n');
-	if (!endp)
-		return 0;
-
-	len = endp - person;
-
-	if (split_ident_line(&ident, person, len))
-		return 0;
-
-	mail = ident.mail_begin;
-	maillen = ident.mail_end - ident.mail_begin;
-	name = ident.name_begin;
-	namelen = ident.name_end - ident.name_begin;
-
-	if (map_user(mailmap, &mail, &maillen, &name, &namelen)) {
-		struct strbuf namemail = STRBUF_INIT;
-		size_t newlen;
-
-		strbuf_addf(&namemail, "%.*s <%.*s>",
-			    (int)namelen, name, (int)maillen, mail);
-
-		strbuf_splice(buf, ident.name_begin - buf->buf,
-			      ident.mail_end - ident.name_begin + 1,
-			      namemail.buf, namemail.len);
-
-		newlen = namemail.len;
-
-		strbuf_release(&namemail);
-
-		return newlen - (ident.mail_end - ident.name_begin + 1);
-	}
-
-	return 0;
-}
-
-static void commit_rewrite_person(struct strbuf *buf, const char **headers, struct string_list *mailmap)
-{
-	size_t buf_offset = 0;
-
-	if (!mailmap)
-		return;
-
-	for (;;) {
-		const char *person, *line;
-		size_t i, linelen;
-
-		line = buf->buf + buf_offset;
-		linelen = strchrnul(line, '\n') - line + 1;
-
-		if (linelen <= 1)
-			/* End of header */
-			return;
-
-		buf_offset += linelen;
-
-		for (i = 0; headers[i]; i++)
-			if (skip_prefix(line, headers[i], &person))
-				buf_offset += rewrite_ident_line(person, buf, mailmap);
-	}
-}
-
 static int commit_match(struct commit *commit, struct rev_info *opt)
 {
 	int retval;
-- 
2.37.0.6.g69b7ad898b
Previous: Johannes SchindelinNext: Siddharth Asthana
Message 34 of 68 in “Add support for mailmap in cat-file”
  1. 0/3 Add support for mailmap in cat-fileSiddharth Asthana, Jun 30, 2022
  2. 2/3 ident: rename commit_rewrite_person() to rewrite_ident_line()Siddharth Asthana, Jun 30, 2022
  3. Phillip WoodJun 30, 2022
  4. Christian CouderJun 30, 2022
  5. Junio C HamanoJun 30, 2022
  6. 1/3 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jun 30, 2022
  7. Đoàn Trần Công DanhJun 30, 2022
  8. Junio C HamanoJun 30, 2022
  9. 3/3 cat-file: add mailmap supportSiddharth Asthana, Jun 30, 2022
  10. Phillip WoodJun 30, 2022
  11. Phillip WoodJun 30, 2022
  12. Christian CouderJun 30, 2022
  13. Junio C HamanoJun 30, 2022
  14. Christian CouderJul 7, 2022
  15. Ævar Arnfjörð BjarmasonJun 30, 2022
  16. Junio C HamanoJun 30, 2022
  17. Christian CouderJul 7, 2022
  18. Junio C HamanoJun 30, 2022
  19. Junio C HamanoJun 30, 2022
  20. 0/4 Add support for mailmap in cat-fileSiddharth Asthana, Jul 7, 2022
  21. 1/4 revision: improve commit_rewrite_person()Siddharth Asthana, Jul 7, 2022
  22. Junio C HamanoJul 7, 2022
  23. Đoàn Trần Công DanhJul 8, 2022
  24. 2/4 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jul 7, 2022
  25. 3/4 ident: rename commit_rewrite_person() to apply_mailmap_to_header()Siddharth Asthana, Jul 7, 2022
  26. 4/4 cat-file: add mailmap supportSiddharth Asthana, Jul 7, 2022
  27. Junio C HamanoJul 7, 2022
  28. Johannes SchindelinJul 8, 2022
  29. Junio C HamanoJul 7, 2022
  30. Junio C HamanoJul 7, 2022
  31. 0/4 Add support for mailmap in cat-fileSiddharth Asthana, Jul 9, 2022
  32. 1/4 revision: improve commit_rewrite_person()Siddharth Asthana, Jul 9, 2022
  33. Johannes SchindelinJul 12, 2022
  34. 2/4 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jul 9, 2022
  35. 3/4 ident: rename commit_rewrite_person() to apply_mailmap_to_header()Siddharth Asthana, Jul 9, 2022
  36. 4/4 cat-file: add mailmap supportSiddharth Asthana, Jul 9, 2022
  37. Junio C HamanoJul 10, 2022
  38. Johannes SchindelinJul 12, 2022
  39. Junio C HamanoJul 12, 2022
  40. Siddharth AsthanaJul 12, 2022
  41. Junio C HamanoJul 12, 2022
  42. 0/4 Add support for mailmap in cat-fileSiddharth Asthana, Jul 12, 2022
  43. 1/4 revision: improve commit_rewrite_person()Siddharth Asthana, Jul 12, 2022
  44. Ævar Arnfjörð BjarmasonJul 13, 2022
  45. Christian CouderJul 13, 2022
  46. Junio C HamanoJul 14, 2022
  47. 2/4 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jul 12, 2022
  48. 3/4 ident: rename commit_rewrite_person() to apply_mailmap_to_header()Siddharth Asthana, Jul 12, 2022
  49. Ævar Arnfjörð BjarmasonJul 13, 2022
  50. Christian CouderJul 13, 2022
  51. 4/4 cat-file: add mailmap supportSiddharth Asthana, Jul 12, 2022
  52. 0/4 Add support for mailmap in cat-fileSiddharth Asthana, Jul 16, 2022
  53. 1/4 revision: improve commit_rewrite_person()Siddharth Asthana, Jul 16, 2022
  54. Junio C HamanoJul 17, 2022
  55. 2/4 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jul 16, 2022
  56. 3/4 ident: rename commit_rewrite_person() to apply_mailmap_to_header()Siddharth Asthana, Jul 16, 2022
  57. 4/4 cat-file: add mailmap supportSiddharth Asthana, Jul 16, 2022
  58. 0/4 Add support for mailmap in cat-fileSiddharth Asthana, Jul 18, 2022
  59. 1/4 revision: improve commit_rewrite_person()Siddharth Asthana, Jul 18, 2022
  60. 2/4 ident: move commit_rewrite_person() to ident.cSiddharth Asthana, Jul 18, 2022
  61. 3/4 ident: rename commit_rewrite_person() to apply_mailmap_to_header()Siddharth Asthana, Jul 18, 2022
  62. 4/4 cat-file: add mailmap supportSiddharth Asthana, Jul 18, 2022
  63. Junio C HamanoJul 25, 2022
  64. Christian CouderJul 28, 2022
  65. Junio C HamanoJul 28, 2022
  66. Siddharth AsthanaJul 30, 2022
  67. Đoàn Trần Công DanhJul 9, 2022
  68. Christian CouderJul 9, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.