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

Re: [PATCH 1/3] ident: move commit_rewrite_person() to ident.c

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 30, 2022, 23:22 UTC
Message-ID
<xmqqo7y9buu9.fsf@gitster.g>
In-Reply-To
<20220630142444.651948-2-siddharthasthana31@gmail.com>
Siddharth Asthana <siddharthasthana31@gmail.com> writes:
> +/*
> + * Given a commit or tag object buffer, replaces the person's

I do not think you should refer to "or tag" at this point. It is not designed to be used by anything other than a commit, and nobody passes a tag in the original code, or even after this patch is applied.

> + * (author/committer/tagger) name and email with their canonical
> + * name and email using mailmap mechanism. Signals a success with
"using" -> "using the"
> + * 1 and failure with a 0.

I do not think 0 signals a failure. If it makes changes, then the function returns a non-zero value. 0 only indicates "we made no modification to the buffer".

Show 11 quoted lines
> +int commit_rewrite_person(struct strbuf *buf, const char *what, struct string_list *mailmap)
> +{
> +	char *person, *endp;
> +	size_t len, namelen, maillen;
> +	const char *name;
> +	const char *mail;
> +	struct ident_split ident;
> +
> +	person = strstr(buf->buf, what);
> +	if (!person)
> +		return 0;

I do not think it is a good idea to expose this as a public function as is, especially given that what you have to pass in "what" is a bit awkward. The function is designed to find and replace an ident string in the header part, and the way it avoids a random occurence of author Siddharth Asthana <si...@gmail.com> in the text, not nececessarily in the header, is by insisting "author" to appear at the beginning of line by passing "\nauthor " as "what".

Also as you can see, the implementation does not make *any* effort to limit itself to the commit/tag header by locating the blank line that appears after the header part and stopping the search there. That may not be *your* bug, but should be fixed before exposing it as a public function and inflicting its bug to more callers.

Also the interface forces the caller to make multiple calls if it wants to rewrite idents on multiple headers. It shouldn't be the case.

To support the existing caller better, it should be updated to
 * take one or more header names (like "author", "committer"), make
   a single pass in the input buffer to locate these headers and
   replace idents on them;
 * stop at the end of header, ensuring that nothing in the body of
   the commit object is modified.

Alternatively, it may not be a bad idea to simplify the interface so that _all_ headers are subject to be rewritten, without any need to the "what" parameter. If you want to go that route, then you would probably have a loop over buf->buf that iterates one line at a time, stopping at the first empty line that denotes the end of header. For each line, you'd skip to the first SP that is past the header name, see if split_ident_line() thinks the line it got indeed has an ident, and use map_user() to the ident if it found. Do that for each line and you are done when you reached the end of the header.

Once we fix the external interface like so while being a static function inside revision.c and update its two callers (which will become just a single caller), we can move and expose it as a public function.

Thanks.
Previous: Đoàn Trần Công DanhNext: Siddharth Asthana
Message 8 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.