On Sat, Mar 13, 2021 at 8:42 AM Charvi Mendiratta <charvi077@xxxxxxxxx> wrote: > `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. > > In order to prevent rebase from creating commits with an empty > message we refuse to create an "amend!" commit if commit message > body is empty. > > Signed-off-by: Charvi Mendiratta <charvi077@xxxxxxxxx> > --- > diff --git a/builtin/commit.c b/builtin/commit.c > @@ -1152,6 +1188,12 @@ static void finalize_deferred_config(struct wt_status *s) > +/* returns the length of intial segment of alpha characters only */ > +static size_t skip_suboption(char *fixup_message) { > + const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; > + return strspn(fixup_message, alphas); > +} With the function name change, the comment above the function has become outdated. Instead, it should instead explain the function's purpose at a high-level (not at the low-level of skipping over alpha-only characters -- especially since the alpha-only restriction may change in the future). By high-level, I mean talking about skipping past a token which is likely to be a --fixup suboption, and giving the reason why the set of characters which comprise the token is limited (perhaps citing the example Junio had given earlier in which the code should not mistakenly scan too far to a legitimate ":" in <commit>). > @@ -1227,6 +1269,34 @@ static int parse_and_validate_options(int argc, const char *argv[], > + if (fixup_message) { > + /* > + * We limit --fixup's suboptions to only alpha characters. > + * If the first character after a run of alpha is colon, > + * then the part before the colon may be a known suboption > + * name `amend` or a misspelt suboption name. In this case, > + * we treat it as --fixup=<suboption>:<arg>. > + * > + * Otherwise, we are dealing with --fixup=<commit>. > + */ This comment is also now out of date following the function name change. It no longer makes sense for this comment to talk about skipping alpha-only characters; it should be written at a semantically higher level, talking instead about skipping the suboption prefix (or something) since that's what the function call is all about. > + size_t len = skip_suboption(fixup_message); > + if (len && fixup_message[len] == ':') { > + fixup_message[len++] = '\0'; > + fixup_commit = fixup_message + len; > + if (!strcmp("amend", fixup_message)) { > + fixup_prefix = "amend"; > + allow_empty = 1; > + } else { > + die(_("unknown option: --fixup=%s:%s"), fixup_message, fixup_commit); > + } These are quite minor issues, not necessarily worth a re-roll. (It might be perfectly fine to send a patch later on which addresses these issues.)