From: Junio C Hamano <gitster@pobox.com>
To: Charvi Mendiratta <charvi077@gmail.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com,
phillip.wood123@gmail.com,
Christian Couder <chriscool@tuxfamily.org>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Subject: Re: [PATCH v2 3/6] commit: add a reword suboption to --fixup
Date: Thu, 25 Feb 2021 12:32:59 -0800 [thread overview]
Message-ID: <xmqq7dmvubus.fsf@gitster.g> (raw)
In-Reply-To: <20210225100855.25530-4-charvi077@gmail.com> (Charvi Mendiratta's message of "Thu, 25 Feb 2021 15:38:58 +0530")
Charvi Mendiratta <charvi077@gmail.com> writes:
> `git commit --fixup=reword:<commit>` creates an empty "amend!" commit
> that will reword <commit> without changing its contents when it is
> rebased with --autosquash.
>
> Apart from ignoring staged changes it works similarly to
> `--fixup=amend:<commit>`.
>
> Mentored-by: Christian Couder <chriscool@tuxfamily.org>
> Mentored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Signed-off-by: Charvi Mendiratta <charvi077@gmail.com>
> ---
> builtin/commit.c | 46 +++++++++++++++++++++++++++++++++++++---------
> 1 file changed, 37 insertions(+), 9 deletions(-)
>
> diff --git a/builtin/commit.c b/builtin/commit.c
> index 56ae15a762..82e77aa61d 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -1177,6 +1177,27 @@ static void finalize_deferred_config(struct wt_status *s)
> s->ahead_behind_flags = AHEAD_BEHIND_FULL;
> }
>
> +static void check_fixup_reword_options(int argc) {
> + if (whence != FROM_COMMIT) {
> + if (whence == FROM_MERGE)
> + die(_("You are in the middle of a merge -- cannot reword."));
> + else if (is_from_cherry_pick(whence))
> + die(_("You are in the middle of a cherry-pick -- cannot reword."));
> + }
> + if (argc)
> + die(_("cannot combine reword option of --fixup with paths"));
It would be easier if the user is told "foo" in the message when
$ git commit --fixup=reword:HEAD~ -- foo
(from your tests) is attempted, no?
> + if (patch_interactive)
> + die(_("cannot combine reword option of --fixup with --patch"));
> + if (interactive)
> + die(_("cannot combine reword option of --fixup with --interactive"));
> + if (all)
> + die(_("cannot combine reword option of --fixup with --all"));
> + if (also)
> + die(_("cannot combine reword option of --fixup with --include"));
> + if (only)
> + die(_("cannot combine reword option of --fixup with --only"));
> +}
> +
> /* returns the length of intial segment of alpha characters only */
> static size_t get_alpha_len(char *fixup_message) {
> const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
> @@ -1261,18 +1282,25 @@ static int parse_and_validate_options(int argc, const char *argv[],
>
> if (fixup_message) {
> /*
> - * As `amend` suboption contains only alpha
> - * character. So check if first non alpha
> - * character in fixup_message is ':'.
> + * As `amend`/`reword` suboptions contains only alpha
> + * characters. So check if first non alpha character
> + * in fixup_message is ':'.
> */
> size_t len = get_alpha_len(fixup_message);
> if (len && fixup_message[len] == ':') {
> fixup_message[len] = '\0';
> fixup_commit = fixup_message + ++len;
> - if (starts_with("amend", fixup_message))
> + if (starts_with("amend", fixup_message) ||
> + starts_with("reword", fixup_message)) {
> fixup_prefix = "amend";
> - else
> + if (*fixup_message == 'r') {
> + check_fixup_reword_options(argc);
> + allow_empty = 1;
> + only = 1;
OK. We make sure that there is no pathspec and then by giving
only==1, we ignore any difference that already may exist between
HEAD and the index. IOW
edit somefile
git add somefile
git commit --fixup=reword:<commit>
will still record the same tree as HEAD, without affected by the
addition of somefile to the index that is done before.
Good.
> + }
> + } else {
> die(_("unknown option: --fixup=%s:%s"), fixup_message, fixup_commit);
> + }
> } else {
> fixup_commit = fixup_message;
> fixup_prefix = "fixup";
> @@ -1558,11 +1586,11 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
> OPT_STRING('c', "reedit-message", &edit_message, N_("commit"), N_("reuse and edit message from specified commit")),
> OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")),
> /*
> - * TRANSLATORS: please do not translate [amend:]
> - * Here "amend" is an option to the --fixup command
> - * line flag, that creates amend! commit.
> + * TRANSLATORS: please do not translate [(amend|reword):]
> + * Here "amend" and "reword" are options to the --fixup
> + * command line flag, that creates amend! commit.
I am not sure this comment is all that helpful to the translaters.
If they are not allowed to translate <amend|reword> part, telling
them what that part means does not help them very much.
Leave "[(amend|reword):]" as-is, and only translate <commit>.
would be more direct without distracting them with useless piece of
information, no?
> */
> - OPT_STRING(0, "fixup", &fixup_message, N_("[amend:]commit"), N_("use autosquash formatted message to fixup or amend specified commit")),
> + OPT_STRING(0, "fixup", &fixup_message, N_("[(amend|reword):]commit"), N_("use autosquash formatted message to fixup or amend/reword specified commit")),
> OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")),
> OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")),
> OPT_BOOL('s', "signoff", &signoff, N_("add a Signed-off-by trailer")),
next prev parent reply other threads:[~2021-02-25 20:36 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-17 7:29 [PATCH 0/6][Outreachy] commit: Implementation of "amend!" commit Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 1/6] sequencer: export subject_length() Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 2/6] commit: add amend suboption to --fixup to create amend! commit Charvi Mendiratta
2021-02-17 19:49 ` Junio C Hamano
2021-02-18 10:13 ` Charvi Mendiratta
2021-02-18 19:18 ` Junio C Hamano
2021-02-18 20:37 ` Junio C Hamano
2021-02-19 6:10 ` Charvi Mendiratta
2021-02-19 6:09 ` Charvi Mendiratta
2021-02-20 3:15 ` Junio C Hamano
2021-02-21 6:35 ` Charvi Mendiratta
2021-02-21 7:05 ` Junio C Hamano
2021-02-21 9:20 ` Charvi Mendiratta
2021-02-22 17:35 ` Junio C Hamano
2021-02-23 6:05 ` Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 3/6] commit: add a reword suboption to --fixup Charvi Mendiratta
2021-02-17 19:56 ` Junio C Hamano
2021-02-18 10:14 ` Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 4/6] t7500: add tests for --fixup[amend|reword] options Charvi Mendiratta
2021-02-17 19:59 ` Junio C Hamano
2021-02-18 10:15 ` Charvi Mendiratta
2021-02-18 19:26 ` Junio C Hamano
2021-02-19 6:10 ` Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 5/6] t3437: use --fixup with options to create amend! commit Charvi Mendiratta
2021-02-17 7:37 ` [PATCH 6/6] doc/git-commit: add documentation for fixup[amend|reword] options Charvi Mendiratta
2021-02-18 19:23 ` Junio C Hamano
2021-02-19 6:09 ` Charvi Mendiratta
2021-02-23 19:55 ` [PATCH 0/6][Outreachy] commit: Implementation of "amend!" commit Junio C Hamano
2021-02-24 5:54 ` Charvi Mendiratta
2021-02-25 10:08 ` [PATCH v2 " Charvi Mendiratta
2021-02-25 10:08 ` [PATCH v2 1/6] sequencer: export subject_length() Charvi Mendiratta
2021-02-25 10:08 ` [PATCH v2 2/6] commit: add amend suboption to --fixup to create amend! commit Charvi Mendiratta
2021-02-25 21:00 ` Junio C Hamano
2021-02-26 10:38 ` Charvi Mendiratta
2021-02-26 19:32 ` Junio C Hamano
2021-02-27 4:56 ` Charvi Mendiratta
2021-02-25 10:08 ` [PATCH v2 3/6] commit: add a reword suboption to --fixup Charvi Mendiratta
2021-02-25 20:32 ` Junio C Hamano [this message]
2021-02-26 10:35 ` Charvi Mendiratta
2021-02-25 10:09 ` [PATCH v2 4/6] t7500: add tests for --fixup=[amend|reword] options Charvi Mendiratta
2021-02-25 10:09 ` [PATCH v2 5/6] t3437: use --fixup with options to create amend! commit Charvi Mendiratta
2021-02-25 10:09 ` [PATCH v2 6/6] doc/git-commit: add documentation for fixup=[amend|reword] options Charvi Mendiratta
2021-02-25 20:48 ` Junio C Hamano
2021-02-26 10:36 ` Charvi Mendiratta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq7dmvubus.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=charvi077@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=phillip.wood123@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.