On Thu, Jan 18, 2018 at 10:36 AM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: > Jake suggested using "x false" instead of "edit" for some corner cases. > > I do prefer using "x false" for all kinds of things such as stopping > before a commit (edit only let's you stop after a commit), and the > knowledge that "x false" does the least amount of actions behind my back. > > We should have that command as well, maybe? > I agree. I use "x false" very often, and I think stop is probably a better solution since it avoids spawning an extra shell that will just fail. Not sure if stop implies too much about "stop the whole thing" as opposed to "stop here and let me do something manual", but I think it's clear enough. Thanks, Jake > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > --- > git-rebase--interactive.sh | 1 + > sequencer.c | 10 ++++++++++ > 2 files changed, 11 insertions(+) > > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh > index 3cd7446d0b..9eac53f0c5 100644 > --- a/git-rebase--interactive.sh > +++ b/git-rebase--interactive.sh > @@ -166,6 +166,7 @@ l, label <label>= label current HEAD with a name > t, reset <label> = reset HEAD to a label > b, bud = reset HEAD to the revision labeled 'onto', no arguments > m, merge [<label-or-commit>]* = create a merge commit using a given commit's message > +y, stay = stop for shortcut for > > These lines can be re-ordered; they are executed from top to bottom. > " | git stripspace --comment-lines >>"$todo" > diff --git a/sequencer.c b/sequencer.c > index 2b4e6b1232..4b3b9fe59d 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -782,6 +782,7 @@ enum todo_command { > TODO_RESET, > TODO_BUD, > TODO_MERGE, > + TODO_STOP, > /* commands that do nothing but are counted for reporting progress */ > TODO_NOOP, > TODO_DROP, > @@ -803,6 +804,7 @@ static struct { > { 'l', "label" }, > { 't', "reset" }, > { 'b', "bud" }, > + { 'y', "stay" }, > { 'm', "merge" }, > { 0, "noop" }, > { 'd', "drop" }, > @@ -1307,6 +1309,12 @@ static int parse_insn_line(struct todo_item *item, const char *bol, char *eol) > return 0; > } > > + if (item->command == TODO_STOP) { > + item->commit = NULL; > + item->arg = ""; > + item->arg_len = 0; > + } > + > end_of_object_name = (char *) bol + strcspn(bol, " \t\n"); > item->arg = end_of_object_name + strspn(end_of_object_name, " \t"); > item->arg_len = (int)(eol - item->arg); > @@ -2407,6 +2415,8 @@ static int pick_commits(struct todo_list *todo_list, struct replay_opts *opts) > /* `current` will be incremented below */ > todo_list->current = -1; > } > + } else if (item->command == TODO_STOP) { > + todo_list->current = -1; > } else if (item->command == TODO_LABEL) > res = do_label(item->arg, item->arg_len); > else if (item->command == TODO_RESET) > -- > 2.16.0.rc1.238.g530d649a79-goog >