{"thread":{"id":"62326","subject":"[PATCH] trailer: spread usage of \"trailer_block\" language","startedAt":"2024-10-13T11:58:45Z","lastAt":"2024-11-12T10:49:14Z","messageCount":7,"participants":["Linus Arver via GitGitGadget","Linus Arver","Taylor Blau","Johannes Schindelin","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"504945","messageId":"pull.1811.git.git.1728820722580.gitgitgadget@gmail.com","threadId":"62326","inReplyTo":null,"subject":"[PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Linus Arver via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2024-10-13T11:58:42Z","receivedAt":"2024-10-13T11:58:45Z","isPatch":true,"sender":{"key":"linus@ucla.edu","avatar":null},"body":"From: Linus Arver <linusa@google.com>\n\nDeprecate the \"trailer_info\" struct name and replace it with\n\"trailer_block\". This is more readable, for two reasons:\n\n  1. \"trailer_info\" on the surface sounds like it's about a single\n     trailer when in reality it is a collection of one or more trailers,\n     and\n\n  2. the \"*_block\" suffix is more informative than \"*_info\", because it\n     describes a block (or region) of contiguous text which has trailers\n     in it, which has been parsed into the trailer_block structure.\n\nRename the\n\n    size_t trailer_block_start, trailer_block_end;\n\nmembers of trailer_info to just \"start\" and \"end\". Rename the \"info\"\npointer to \"trailer_block\" because it is more descriptive. Update\ncomments accordingly.\n\nSigned-off-by: Linus Arver <linus@ucla.edu>\n---\n    trailer: spread usage of \"trailer_block\" language\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1811%2Flistx%2Ftrailer-cleanup-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1811/listx/trailer-cleanup-v1\nPull-Request: https://github.com/git/git/pull/1811\n\n builtin/interpret-trailers.c | 25 +++++-----\n trailer.c                    | 95 ++++++++++++++++++------------------\n trailer.h                    | 30 ++++++------\n 3 files changed, 76 insertions(+), 74 deletions(-)\n\ndiff --git a/builtin/interpret-trailers.c b/builtin/interpret-trailers.c\nindex c5e56e2cd3d..44d8ccddc9d 100644\n--- a/builtin/interpret-trailers.c\n+++ b/builtin/interpret-trailers.c\n@@ -141,8 +141,8 @@ static void interpret_trailers(const struct process_trailer_options *opts,\n {\n \tLIST_HEAD(head);\n \tstruct strbuf sb = STRBUF_INIT;\n-\tstruct strbuf trailer_block = STRBUF_INIT;\n-\tstruct trailer_info *info;\n+\tstruct strbuf trailer_block_sb = STRBUF_INIT;\n+\tstruct trailer_block *trailer_block;\n \tFILE *outfile = stdout;\n \n \ttrailer_config_init();\n@@ -152,13 +152,13 @@ static void interpret_trailers(const struct process_trailer_options *opts,\n \tif (opts->in_place)\n \t\toutfile = create_in_place_tempfile(file);\n \n-\tinfo = parse_trailers(opts, sb.buf, &head);\n+\ttrailer_block = parse_trailers(opts, sb.buf, &head);\n \n-\t/* Print the lines before the trailers */\n+\t/* Print the lines before the trailer block */\n \tif (!opts->only_trailers)\n-\t\tfwrite(sb.buf, 1, trailer_block_start(info), outfile);\n+\t\tfwrite(sb.buf, 1, trailer_block_start(trailer_block), outfile);\n \n-\tif (!opts->only_trailers && !blank_line_before_trailer_block(info))\n+\tif (!opts->only_trailers && !blank_line_before_trailer_block(trailer_block))\n \t\tfprintf(outfile, \"\\n\");\n \n \n@@ -172,15 +172,16 @@ static void interpret_trailers(const struct process_trailer_options *opts,\n \t}\n \n \t/* Print trailer block. */\n-\tformat_trailers(opts, &head, &trailer_block);\n+\tformat_trailers(opts, &head, &trailer_block_sb);\n \tfree_trailers(&head);\n-\tfwrite(trailer_block.buf, 1, trailer_block.len, outfile);\n-\tstrbuf_release(&trailer_block);\n+\tfwrite(trailer_block_sb.buf, 1, trailer_block_sb.len, outfile);\n+\tstrbuf_release(&trailer_block_sb);\n \n-\t/* Print the lines after the trailers as is */\n+\t/* Print the lines after the trailer block as is. */\n \tif (!opts->only_trailers)\n-\t\tfwrite(sb.buf + trailer_block_end(info), 1, sb.len - trailer_block_end(info), outfile);\n-\ttrailer_info_release(info);\n+\t\tfwrite(sb.buf + trailer_block_end(trailer_block), 1,\n+\t\t       sb.len - trailer_block_end(trailer_block), outfile);\n+\ttrailer_block_release(trailer_block);\n \n \tif (opts->in_place)\n \t\tif (rename_tempfile(&trailers_tempfile, file))\ndiff --git a/trailer.c b/trailer.c\nindex 682d74505bf..59affa2159b 100644\n--- a/trailer.c\n+++ b/trailer.c\n@@ -13,19 +13,20 @@\n  * Copyright (c) 2013, 2014 Christian Couder <chriscool@tuxfamily.org>\n  */\n \n-struct trailer_info {\n+struct trailer_block {\n \t/*\n \t * True if there is a blank line before the location pointed to by\n-\t * trailer_block_start.\n+\t * \"start\".\n \t */\n \tint blank_line_before_trailer;\n \n \t/*\n-\t * Offsets to the trailer block start and end positions in the input\n-\t * string. If no trailer block is found, these are both set to the\n-\t * \"true\" end of the input (find_end_of_log_message()).\n+\t * The locations of the start and end positions of the trailer block\n+\t * found, as offsets from the beginning of the source text from which\n+\t * this trailer block was parsed. If no trailer block is found, these\n+\t * are both set to 0.\n \t */\n-\tsize_t trailer_block_start, trailer_block_end;\n+\tsize_t start, end;\n \n \t/*\n \t * Array of trailers found.\n@@ -975,16 +976,16 @@ static void unfold_value(struct strbuf *val)\n \tstrbuf_release(&out);\n }\n \n-static struct trailer_info *trailer_info_new(void)\n+static struct trailer_block *trailer_block_new(void)\n {\n-\tstruct trailer_info *info = xcalloc(1, sizeof(*info));\n-\treturn info;\n+\tstruct trailer_block *trailer_block = xcalloc(1, sizeof(*trailer_block));\n+\treturn trailer_block;\n }\n \n-static struct trailer_info *trailer_info_get(const struct process_trailer_options *opts,\n-\t\t\t\t\t     const char *str)\n+static struct trailer_block *trailer_block_get(const struct process_trailer_options *opts,\n+\t\t\t\t\t       const char *str)\n {\n-\tstruct trailer_info *info = trailer_info_new();\n+\tstruct trailer_block *trailer_block = trailer_block_new();\n \tsize_t end_of_log_message = 0, trailer_block_start = 0;\n \tstruct strbuf **trailer_lines, **ptr;\n \tchar **trailer_strings = NULL;\n@@ -1017,34 +1018,34 @@ static struct trailer_info *trailer_info_get(const struct process_trailer_option\n \t}\n \tstrbuf_list_free(trailer_lines);\n \n-\tinfo->blank_line_before_trailer = ends_with_blank_line(str,\n-\t\t\t\t\t\t\t       trailer_block_start);\n-\tinfo->trailer_block_start = trailer_block_start;\n-\tinfo->trailer_block_end = end_of_log_message;\n-\tinfo->trailers = trailer_strings;\n-\tinfo->trailer_nr = nr;\n+\ttrailer_block->blank_line_before_trailer = ends_with_blank_line(str,\n+\t\t\t\t\t\t\t\t\ttrailer_block_start);\n+\ttrailer_block->start = trailer_block_start;\n+\ttrailer_block->end = end_of_log_message;\n+\ttrailer_block->trailers = trailer_strings;\n+\ttrailer_block->trailer_nr = nr;\n \n-\treturn info;\n+\treturn trailer_block;\n }\n \n /*\n- * Parse trailers in \"str\", populating the trailer info and \"trailer_objects\"\n+ * Parse trailers in \"str\", populating the trailer_block and \"trailer_objects\"\n  * linked list structure.\n  */\n-struct trailer_info *parse_trailers(const struct process_trailer_options *opts,\n-\t\t\t\t    const char *str,\n-\t\t\t\t    struct list_head *trailer_objects)\n+struct trailer_block *parse_trailers(const struct process_trailer_options *opts,\n+\t\t\t\t     const char *str,\n+\t\t\t\t     struct list_head *trailer_objects)\n {\n-\tstruct trailer_info *info;\n+\tstruct trailer_block *trailer_block;\n \tstruct strbuf tok = STRBUF_INIT;\n \tstruct strbuf val = STRBUF_INIT;\n \tsize_t i;\n \n-\tinfo = trailer_info_get(opts, str);\n+\ttrailer_block = trailer_block_get(opts, str);\n \n-\tfor (i = 0; i < info->trailer_nr; i++) {\n+\tfor (i = 0; i < trailer_block->trailer_nr; i++) {\n \t\tint separator_pos;\n-\t\tchar *trailer = info->trailers[i];\n+\t\tchar *trailer = trailer_block->trailers[i];\n \t\tif (starts_with(trailer, comment_line_str))\n \t\t\tcontinue;\n \t\tseparator_pos = find_separator(trailer, separators);\n@@ -1065,7 +1066,7 @@ struct trailer_info *parse_trailers(const struct process_trailer_options *opts,\n \t\t}\n \t}\n \n-\treturn info;\n+\treturn trailer_block;\n }\n \n void free_trailers(struct list_head *trailers)\n@@ -1077,28 +1078,28 @@ void free_trailers(struct list_head *trailers)\n \t}\n }\n \n-size_t trailer_block_start(struct trailer_info *info)\n+size_t trailer_block_start(struct trailer_block *trailer_block)\n {\n-\treturn info->trailer_block_start;\n+\treturn trailer_block->start;\n }\n \n-size_t trailer_block_end(struct trailer_info *info)\n+size_t trailer_block_end(struct trailer_block *trailer_block)\n {\n-\treturn info->trailer_block_end;\n+\treturn trailer_block->end;\n }\n \n-int blank_line_before_trailer_block(struct trailer_info *info)\n+int blank_line_before_trailer_block(struct trailer_block *trailer_block)\n {\n-\treturn info->blank_line_before_trailer;\n+\treturn trailer_block->blank_line_before_trailer;\n }\n \n-void trailer_info_release(struct trailer_info *info)\n+void trailer_block_release(struct trailer_block *trailer_block)\n {\n \tsize_t i;\n-\tfor (i = 0; i < info->trailer_nr; i++)\n-\t\tfree(info->trailers[i]);\n-\tfree(info->trailers);\n-\tfree(info);\n+\tfor (i = 0; i < trailer_block->trailer_nr; i++)\n+\t\tfree(trailer_block->trailers[i]);\n+\tfree(trailer_block->trailers);\n+\tfree(trailer_block);\n }\n \n void format_trailers(const struct process_trailer_options *opts,\n@@ -1166,19 +1167,19 @@ void format_trailers_from_commit(const struct process_trailer_options *opts,\n \t\t\t\t struct strbuf *out)\n {\n \tLIST_HEAD(trailer_objects);\n-\tstruct trailer_info *info = parse_trailers(opts, msg, &trailer_objects);\n+\tstruct trailer_block *trailer_block = parse_trailers(opts, msg, &trailer_objects);\n \n \t/* If we want the whole block untouched, we can take the fast path. */\n \tif (!opts->only_trailers && !opts->unfold && !opts->filter &&\n \t    !opts->separator && !opts->key_only && !opts->value_only &&\n \t    !opts->key_value_separator) {\n-\t\tstrbuf_add(out, msg + info->trailer_block_start,\n-\t\t\t   info->trailer_block_end - info->trailer_block_start);\n+\t\tstrbuf_add(out, msg + trailer_block->start,\n+\t\t\t   trailer_block->end - trailer_block->start);\n \t} else\n \t\tformat_trailers(opts, &trailer_objects, out);\n \n \tfree_trailers(&trailer_objects);\n-\ttrailer_info_release(info);\n+\ttrailer_block_release(trailer_block);\n }\n \n void trailer_iterator_init(struct trailer_iterator *iter, const char *msg)\n@@ -1187,14 +1188,14 @@ void trailer_iterator_init(struct trailer_iterator *iter, const char *msg)\n \tstrbuf_init(&iter->key, 0);\n \tstrbuf_init(&iter->val, 0);\n \topts.no_divider = 1;\n-\titer->internal.info = trailer_info_get(&opts, msg);\n+\titer->internal.trailer_block = trailer_block_get(&opts, msg);\n \titer->internal.cur = 0;\n }\n \n int trailer_iterator_advance(struct trailer_iterator *iter)\n {\n-\tif (iter->internal.cur < iter->internal.info->trailer_nr) {\n-\t\tchar *line = iter->internal.info->trailers[iter->internal.cur++];\n+\tif (iter->internal.cur < iter->internal.trailer_block->trailer_nr) {\n+\t\tchar *line = iter->internal.trailer_block->trailers[iter->internal.cur++];\n \t\tint separator_pos = find_separator(line, separators);\n \n \t\titer->raw = line;\n@@ -1211,7 +1212,7 @@ int trailer_iterator_advance(struct trailer_iterator *iter)\n \n void trailer_iterator_release(struct trailer_iterator *iter)\n {\n-\ttrailer_info_release(iter->internal.info);\n+\ttrailer_block_release(iter->internal.trailer_block);\n \tstrbuf_release(&iter->val);\n \tstrbuf_release(&iter->key);\n }\ndiff --git a/trailer.h b/trailer.h\nindex 6eb53df155e..4740549586a 100644\n--- a/trailer.h\n+++ b/trailer.h\n@@ -4,7 +4,7 @@\n #include \"list.h\"\n #include \"strbuf.h\"\n \n-struct trailer_info;\n+struct trailer_block;\n struct strvec;\n \n enum trailer_where {\n@@ -72,12 +72,12 @@ void process_trailers_lists(struct list_head *head,\n \t\t\t    struct list_head *arg_head);\n \n /*\n- * Given some input string \"str\", return a pointer to an opaque trailer_info\n+ * Given some input string \"str\", return a pointer to an opaque trailer_block\n  * structure. Also populate the trailer_objects list with parsed trailer\n  * objects. Internally this calls trailer_info_get() to get the opaque pointer,\n  * but does some extra work to populate the trailer_objects linked list.\n  *\n- * The opaque trailer_info pointer can be used to check the position of the\n+ * The opaque trailer_block pointer can be used to check the position of the\n  * trailer block as offsets relative to the beginning of \"str\" in\n  * trailer_block_start() and trailer_block_end().\n  * blank_line_before_trailer_block() returns 1 if there is a blank line just\n@@ -89,21 +89,21 @@ void process_trailers_lists(struct list_head *head,\n  * For iterating through the parsed trailer block (if you don't care about the\n  * position of the trailer block itself in the context of the larger string text\n  * from which it was parsed), please see trailer_iterator_init() which uses the\n- * trailer_info struct internally.\n+ * trailer_block struct internally.\n  *\n  * Lastly, callers should call trailer_info_release() when they are done using\n  * the opaque pointer.\n  *\n- * NOTE: Callers should treat both trailer_info and trailer_objects as\n- * read-only items, because there is some overlap between the two (trailer_info\n+ * NOTE: Callers should treat both trailer_block and trailer_objects as\n+ * read-only items, because there is some overlap between the two (trailer_block\n  * has \"char **trailers\" string array, and trailer_objects will have the same\n  * data but as a linked list of trailer_item objects). This API does not perform\n  * any synchronization between the two. In the future we should be able to\n  * reduce the duplication and use just the linked list.\n  */\n-struct trailer_info *parse_trailers(const struct process_trailer_options *,\n-\t\t\t\t    const char *str,\n-\t\t\t\t    struct list_head *trailer_objects);\n+struct trailer_block *parse_trailers(const struct process_trailer_options *,\n+\t\t\t\t     const char *str,\n+\t\t\t\t     struct list_head *trailer_objects);\n \n /*\n  * Return the offset of the start of the trailer block. That is, 0 is the start\n@@ -111,24 +111,24 @@ struct trailer_info *parse_trailers(const struct process_trailer_options *,\n  * indicates how many bytes we have to skip over before we get to the beginning\n  * of the trailer block.\n  */\n-size_t trailer_block_start(struct trailer_info *);\n+size_t trailer_block_start(struct trailer_block *);\n \n /*\n  * Return the end of the trailer block, again relative to the start of the\n  * input.\n  */\n-size_t trailer_block_end(struct trailer_info *);\n+size_t trailer_block_end(struct trailer_block *);\n \n /*\n  * Return 1 if the trailer block had an extra newline (blank line) just before\n  * it.\n  */\n-int blank_line_before_trailer_block(struct trailer_info *);\n+int blank_line_before_trailer_block(struct trailer_block *);\n \n /*\n- * Free trailer_info struct.\n+ * Free trailer_block struct.\n  */\n-void trailer_info_release(struct trailer_info *info);\n+void trailer_block_release(struct trailer_block *);\n \n void trailer_config_init(void);\n void format_trailers(const struct process_trailer_options *,\n@@ -167,7 +167,7 @@ struct trailer_iterator {\n \n \t/* private */\n \tstruct {\n-\t\tstruct trailer_info *info;\n+\t\tstruct trailer_block *trailer_block;\n \t\tsize_t cur;\n \t} internal;\n };\n\nbase-commit: ef8ce8f3d4344fd3af049c17eeba5cd20d98b69f\n-- \ngitgitgadget\n"},{"id":"505142","messageId":"CAMo6p=Fo0gp6Vgq73E6k=Q+tV0g8EB3L_AEWq_4e85G86QUc1Q@mail.gmail.com","threadId":"62326","inReplyTo":"pull.1811.git.git.1728820722580.gitgitgadget@gmail.com","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Linus Arver","fromEmail":"linus@ucla.edu","sentAt":"2024-10-15T11:32:42Z","receivedAt":"2024-10-15T11:32:43Z","isPatch":true,"sender":{"key":"linus@ucla.edu","avatar":null},"body":"\"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n\n> From: Linus Arver <linusa@google.com>\n>\n\nHmm. I just noticed that GGG (?) is somehow inferring my defunct\n@google.com address. Not sure how to fix this... any tips?\n"},{"id":"505203","messageId":"Zw7Gx6D8ASANDwOk@nand.local","threadId":"62326","inReplyTo":"CAMo6p=Fo0gp6Vgq73E6k=Q+tV0g8EB3L_AEWq_4e85G86QUc1Q@mail.gmail.com","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Taylor Blau","fromEmail":"me@ttaylorr.com","sentAt":"2024-10-15T19:47:19Z","receivedAt":"2024-10-15T19:47:21Z","isPatch":true,"sender":{"key":"me@ttaylorr.com","avatar":"https://avatars.githubusercontent.com/u/301000140?v=4"},"body":"On Tue, Oct 15, 2024 at 04:32:42AM -0700, Linus Arver wrote:\n> \"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n>\n> > From: Linus Arver <linusa@google.com>\n> >\n>\n> Hmm. I just noticed that GGG (?) is somehow inferring my defunct\n> @google.com address. Not sure how to fix this... any tips?\n\nPerhaps Johannes (CC'd) would know?\n\nThanks,\nTaylor\n"},{"id":"506683","messageId":"9ddc7555-9459-72ac-81a6-84166baf7570@gmx.de","threadId":"62326","inReplyTo":"CAMo6p=Fo0gp6Vgq73E6k=Q+tV0g8EB3L_AEWq_4e85G86QUc1Q@mail.gmail.com","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2024-11-05T21:02:51Z","receivedAt":"2024-11-05T21:02:55Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi Linus,\n\nOn Tue, 15 Oct 2024, Linus Arver wrote:\n\n> \"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n>\n> > From: Linus Arver <linusa@google.com>\n> >\n>\n> Hmm. I just noticed that GGG (?) is somehow inferring my defunct\n> @google.com address. Not sure how to fix this... any tips?\n\nThis email address is apparently part of the commit object, see\nhttps://github.com/git/git/commit/a556a5c05c44e521b572d595d5d32cc4158612c0.patch\n\n(you can also see it locally if you call `git show --no-mailmap\na556a5c05c44e521b572d595d5d32cc4158612c0`, but not if you omit\n`--no-mailmap`)\n\nCiao,\nJohannes\n"},{"id":"507098","messageId":"xmqq34jx8adx.fsf@gitster.g","threadId":"62326","inReplyTo":"pull.1811.git.git.1728820722580.gitgitgadget@gmail.com","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2024-11-12T02:16:10Z","receivedAt":"2024-11-12T02:16:13Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n\n> From: Linus Arver <linusa@google.com>\n>\n> Deprecate the \"trailer_info\" struct name and replace it with\n> \"trailer_block\". This is more readable, for two reasons:\n>\n>   1. \"trailer_info\" on the surface sounds like it's about a single\n>      trailer when in reality it is a collection of one or more trailers,\n>      and\n>\n>   2. the \"*_block\" suffix is more informative than \"*_info\", because it\n>      describes a block (or region) of contiguous text which has trailers\n>      in it, which has been parsed into the trailer_block structure.\n>\n> Rename the\n>\n>     size_t trailer_block_start, trailer_block_end;\n>\n> members of trailer_info to just \"start\" and \"end\". Rename the \"info\"\n> pointer to \"trailer_block\" because it is more descriptive. Update\n> comments accordingly.\n\nAll makes sense.  Often \"_info\" suffix has very low information\ndensity, as everything is \"info\" in a sense ;-)\n\nThis was a more-or-less mechanical and straight-forward renaming of\na handful of variables and structure fields.  It is a shame that\nnobody bothered to review these changes (or say \"this does not make\nanything worse, but is it worth it?\" to object to it, for that\nmatter) for almost a month.\n\nWill merge to 'next' (unless there is a belated \"it may not break,\nbut it is not a good idea because ...\", that is).\n\nThanks.\n"},{"id":"507131","messageId":"CAMo6p=GMfz-2QYqqAM_2W4g+hRi50T9LJhT21L0mJcXOtWi2Fg@mail.gmail.com","threadId":"62326","inReplyTo":"9ddc7555-9459-72ac-81a6-84166baf7570@gmx.de","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Linus Arver","fromEmail":"linus@ucla.edu","sentAt":"2024-11-12T10:39:38Z","receivedAt":"2024-11-12T10:39:39Z","isPatch":true,"sender":{"key":"linus@ucla.edu","avatar":null},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> Hi Linus,\n>\n> On Tue, 15 Oct 2024, Linus Arver wrote:\n>\n>> \"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n>>\n>> > From: Linus Arver <linusa@google.com>\n>> >\n>>\n>> Hmm. I just noticed that GGG (?) is somehow inferring my defunct\n>> @google.com address. Not sure how to fix this... any tips?\n>\n> This email address is apparently part of the commit object, see\n> https://github.com/git/git/commit/a556a5c05c44e521b572d595d5d32cc4158612c0.patch\n>\n> (you can also see it locally if you call `git show --no-mailmap\n> a556a5c05c44e521b572d595d5d32cc4158612c0`, but not if you omit\n> `--no-mailmap`)\n\nAh, thanks! So the commit's Author field is actually set to the google\nemail, but tig and other Git subcommands were using the .mailmap file to\nreplace it with the proper (ucla) one. I didn't realize this was\nhappening, and didn't bother updating the commit itself to use the\nemail.\n"},{"id":"507135","messageId":"CAMo6p=GOjmUQWHE9QH0wUY=FCzN4-mjknryWRbp4dQW4MFthqw@mail.gmail.com","threadId":"62326","inReplyTo":"xmqq34jx8adx.fsf@gitster.g","subject":"Re: [PATCH] trailer: spread usage of \"trailer_block\" language","fromName":"Linus Arver","fromEmail":"linus@ucla.edu","sentAt":"2024-11-12T10:49:13Z","receivedAt":"2024-11-12T10:49:14Z","isPatch":true,"sender":{"key":"linus@ucla.edu","avatar":null},"body":"Junio C Hamano <gitster@pobox.com> writes:\n\n> \"Linus Arver via GitGitGadget\" <gitgitgadget@gmail.com> writes:\n>\n>> From: Linus Arver <linusa@google.com>\n>>\n>> Deprecate the \"trailer_info\" struct name and replace it with\n>> \"trailer_block\". This is more readable, for two reasons:\n>>\n>>   1. \"trailer_info\" on the surface sounds like it's about a single\n>>      trailer when in reality it is a collection of one or more trailers,\n>>      and\n>>\n>>   2. the \"*_block\" suffix is more informative than \"*_info\", because it\n>>      describes a block (or region) of contiguous text which has trailers\n>>      in it, which has been parsed into the trailer_block structure.\n>>\n>> Rename the\n>>\n>>     size_t trailer_block_start, trailer_block_end;\n>>\n>> members of trailer_info to just \"start\" and \"end\". Rename the \"info\"\n>> pointer to \"trailer_block\" because it is more descriptive. Update\n>> comments accordingly.\n>\n> All makes sense.  Often \"_info\" suffix has very low information\n> density, as everything is \"info\" in a sense ;-)\n\nExactly.\n\n> Will merge to 'next' (unless there is a belated \"it may not break,\n> but it is not a good idea because ...\", that is).\n\nYup, sounds good. Thanks!\n"}]}