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?

Signed-off-by: Stefan Beller <sbel...@google.com>
---
 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

Reply via email to