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

Re: [PATCH v4 2/6] commit: add amend suboption to --fixup to create amend! commit

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 11, 2021, 06:25 UTC
Message-ID
<CAPig+cRxZFV7DDtnYOxRqEYU4PwXK8gb2HSehDyGorqdgsmoNQ@mail.gmail.com>
In-Reply-To
<20210310194306.32565-3-charvi077@gmail.com>
On Wed, Mar 10, 2021 at 2:44 PM Charvi Mendiratta <charvi077@gmail.com> wrote:
Show 17 quoted lines
> `git commit --fixup=amend:<commit>` will create an "amend!" commit.
> The resulting commit message subject will be "amend! ..." where
> "..." is the subject line of <commit> and the initial message
> body will be <commit>'s message.
>
> The "amend!" commit when rebased with --autosquash will fixup the
> contents and replace the commit message of <commit> with the
> "amend!" commit's message body.
> [...]
> Signed-off-by: Charvi Mendiratta <charvi077@gmail.com>
> ---
> diff --git a/builtin/commit.c b/builtin/commit.c
> @@ -681,6 +683,23 @@ static void adjust_comment_line_char(const struct strbuf *sb)
> +static int prepare_amend_commit(struct commit *commit, struct strbuf *sb,
> +                               struct pretty_print_context *ctx) {
> +
> +       const char *buffer, *subject, *fmt;
Two style nits:
* opening curly brace of function goes on its own line
* we don't normally have a blank line at the top of the function body
preceding the declarations
So:
    static int prepare_amend_commit(...)
    {
        const  char *buffer, *subject, *fmt;
Show 11 quoted lines
> +       buffer = get_commit_buffer(commit, NULL);
> +       find_commit_subject(buffer, &subject);
> +       /*
> +        * If we amend the 'amend!' commit then we don't want to
> +        * duplicate the subject line.
> +        */
> +       fmt = starts_with(subject, "amend!") ? "%b" : "%B";
> +       format_commit_message(commit, fmt, sb, ctx);
> +       unuse_commit_buffer(commit, buffer);
> +       return 0;
> +}

What is the significance of this function's return value? At least in this patch, the single caller of this function ignores the return value, which suggests that the function need not return any value. Will a later patch add other possible return values to indicate an error or something?

Show 8 quoted lines
> @@ -745,15 +764,32 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
> +               char *fmt = xstrfmt("%s! %%s\n\n", fixup_prefix);
> +               commit = lookup_commit_reference_by_name(fixup_commit);
>                 if (!commit)
> +                       die(_("could not lookup commit %s"), fixup_commit);
>                 ctx.output_encoding = get_commit_output_encoding();
> +               format_commit_message(commit, fmt, &sb, &ctx);
> +               free(fmt);
Nit: it would reduce the cognitive load slightly if `fmt` is prepared
just before it is used rather than being prepared at the top of the
block:
    fmt = xstrfmt("%s! %%s\n\n", fixup_prefix);
    format_commit_message(commit, fmt, &sb, &ctx);
    free(fmt);
Subjective and not at all worth a re-roll.
Show 11 quoted lines
> @@ -1227,6 +1269,34 @@ static int parse_and_validate_options(int argc, const char *argv[],
> +       if (fixup_message) {
> +               /*
> +                * To check if fixup_message that contains ':' is a commit
> +                * reference for example: --fixup="HEAD^{/^area: string}" or
> +                * a suboption of `--fixup`.
> +                *
> +                * As `amend` suboption contains only alpha character.
> +                * So check if first non alpha character in fixup_message
> +                * is ':'.
> +                */

I have a tough time figuring out what this comment is trying to say, and I don't think I would have understood it if Junio had not already explained earlier in this thread why this code is as complex as it is (rather than using, say, skip_prefix()). Perhaps the entire comment can be replaced with this:

    Extract <option> (i.e. `amend`) from `--fixup=<option>:<commit>`,
    if present. To avoid being fooled by a legitimate ":" in <commit>
    (i.e. `--fixup="HEAD^{/^area: string}"`), <option> must be
    composed of only alphabetic characters.
Not necessarily worth a re-roll.
> +               size_t len = get_alpha_len(fixup_message);
> +               if (len && fixup_message[len] == ':') {
> +                       fixup_message[len++] = '\0';
> +                       fixup_commit = fixup_message + len;

An alternate -- just about as compact and perhaps more idiomatic -- way to write all this without introducing the new get_alpha_len() function:

    char *p = fixup_mesage;
    while (isalpha(*p))
        p++;
    if (p > fixup_message && *p == ':') {
        *p = '\0';
        fixup_commit = p + 1;
Subjective and not at all worth a re-roll.
Show 12 quoted lines
> +                       if (!strcmp("amend", fixup_message)) {
> +                               fixup_prefix = "amend";
> +                               allow_empty = 1;
> +                       } else {
> +                               die(_("unknown option: --fixup=%s:%s"), fixup_message, fixup_commit);
> +                       }
> +               } else {
> +                       fixup_commit = fixup_message;
> +                       fixup_prefix = "fixup";
> +                       use_editor = 0;
> +               }
> +       }
Previous: Charvi MendirattaNext: Charvi Mendiratta
Message 71 of 95 in “[Outreachy] commit: Implementation of "amend!" commit”
  1. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 1, 2021
  2. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 1, 2021
  3. Junio C HamanoMar 1, 2021
  4. Charvi MendirattaMar 3, 2021
  5. Eric SunshineMar 1, 2021
  6. Junio C HamanoMar 1, 2021
  7. Eric SunshineMar 1, 2021
  8. Charvi MendirattaMar 3, 2021
  9. Charvi MendirattaMar 3, 2021
  10. Eric SunshineMar 3, 2021
  11. Charvi MendirattaMar 3, 2021
  12. Junio C HamanoMar 4, 2021
  13. Charvi MendirattaMar 4, 2021
  14. Charvi MendirattaMar 3, 2021
  15. Eric SunshineMar 3, 2021
  16. Charvi MendirattaMar 3, 2021
  17. 1/6 sequencer: export subject_length()Charvi Mendiratta, Mar 1, 2021
  18. Eric SunshineMar 1, 2021
  19. Junio C HamanoMar 3, 2021
  20. Charvi MendirattaMar 3, 2021
  21. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 1, 2021
  22. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 1, 2021
  23. Eric SunshineMar 2, 2021
  24. Junio C HamanoMar 3, 2021
  25. Charvi MendirattaMar 3, 2021
  26. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 1, 2021
  27. Junio C HamanoMar 1, 2021
  28. Charvi MendirattaMar 3, 2021
  29. Eric SunshineMar 1, 2021
  30. Charvi MendirattaMar 3, 2021
  31. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 1, 2021
  32. Junio C HamanoMar 1, 2021
  33. Charvi MendirattaMar 3, 2021
  34. Eric SunshineMar 2, 2021
  35. Charvi MendirattaMar 3, 2021
  36. Eric SunshineMar 3, 2021
  37. Charvi MendirattaMar 3, 2021
  38. Junio C HamanoMar 4, 2021
  39. Charvi MendirattaMar 4, 2021
  40. Junio C HamanoMar 4, 2021
  41. Charvi MendirattaMar 5, 2021
  42. Junio C HamanoMar 5, 2021
  43. Charvi MendirattaMar 6, 2021
  44. Eric SunshineMar 6, 2021
  45. Junio C HamanoMar 1, 2021
  46. Charvi MendirattaMar 3, 2021
  47. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 10, 2021
  48. Eric SunshineMar 11, 2021
  49. Charvi MendirattaMar 11, 2021
  50. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 13, 2021
  51. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 13, 2021
  52. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 13, 2021
  53. Eric SunshineMar 14, 2021
  54. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 13, 2021
  55. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 13, 2021
  56. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 13, 2021
  57. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 13, 2021
  58. Eric SunshineMar 14, 2021
  59. Charvi MendirattaMar 14, 2021
  60. 0/6 [Outreachy] commit: Implementation of "amend!" commitCharvi Mendiratta, Mar 15, 2021
  61. Junio C HamanoMar 19, 2021
  62. Eric SunshineMar 19, 2021
  63. Charvi MendirattaMar 19, 2021
  64. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 15, 2021
  65. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 15, 2021
  66. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 15, 2021
  67. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 15, 2021
  68. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 15, 2021
  69. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 15, 2021
  70. 2/6 commit: add amend suboption to --fixup to create amend! commitCharvi Mendiratta, Mar 10, 2021
  71. Eric SunshineMar 11, 2021
  72. Charvi MendirattaMar 11, 2021
  73. Eric SunshineMar 11, 2021
  74. Charvi MendirattaMar 11, 2021
  75. Junio C HamanoMar 14, 2021
  76. Charvi MendirattaMar 14, 2021
  77. Junio C HamanoMar 14, 2021
  78. Eric SunshineMar 14, 2021
  79. Charvi MendirattaMar 15, 2021
  80. Eric SunshineMar 15, 2021
  81. Charvi MendirattaMar 15, 2021
  82. 1/6 sequencer: export and rename subject_length()Charvi Mendiratta, Mar 10, 2021
  83. 3/6 commit: add a reword suboption to --fixupCharvi Mendiratta, Mar 10, 2021
  84. Junio C HamanoMar 11, 2021
  85. Charvi MendirattaMar 11, 2021
  86. Junio C HamanoMar 11, 2021
  87. Eric SunshineMar 11, 2021
  88. Charvi MendirattaMar 11, 2021
  89. 6/6 doc/git-commit: add documentation for fixup=[amend|reword] optionsCharvi Mendiratta, Mar 10, 2021
  90. Junio C HamanoMar 11, 2021
  91. Charvi MendirattaMar 11, 2021
  92. Eric SunshineMar 11, 2021
  93. Charvi MendirattaMar 11, 2021
  94. 5/6 t3437: use --fixup with options to create amend! commitCharvi Mendiratta, Mar 10, 2021
  95. 4/6 t7500: add tests for --fixup=[amend|reword] optionsCharvi Mendiratta, Mar 10, 2021

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.