sequencer (rebase -i): implement the short commands
[gitweb.git] / sequencer.c
index 6a939a10bdf6617bcedcf7bc695a78dab36b6480..29b944d724a4f91ce694e65499e98c8f8544f230 100644 (file)
@@ -678,20 +678,23 @@ enum todo_command {
        TODO_NOOP
 };
 
-static const char *todo_command_strings[] = {
-       "pick",
-       "revert",
-       "edit",
-       "fixup",
-       "squash",
-       "exec",
-       "noop"
+static struct {
+       char c;
+       const char *str;
+} todo_command_info[] = {
+       { 'p', "pick" },
+       { 0,   "revert" },
+       { 'e', "edit" },
+       { 'f', "fixup" },
+       { 's', "squash" },
+       { 'x', "exec" },
+       { 0,   "noop" }
 };
 
 static const char *command_to_string(const enum todo_command command)
 {
-       if ((size_t)command < ARRAY_SIZE(todo_command_strings))
-               return todo_command_strings[command];
+       if ((size_t)command < ARRAY_SIZE(todo_command_info))
+               return todo_command_info[command].str;
        die("Unknown command: %d", command);
 }
 
@@ -1087,12 +1090,16 @@ static int parse_insn_line(struct todo_item *item, const char *bol, char *eol)
                return 0;
        }
 
-       for (i = 0; i < ARRAY_SIZE(todo_command_strings); i++)
-               if (skip_prefix(bol, todo_command_strings[i], &bol)) {
+       for (i = 0; i < ARRAY_SIZE(todo_command_info); i++)
+               if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
+                       item->command = i;
+                       break;
+               } else if (bol[1] == ' ' && *bol == todo_command_info[i].c) {
+                       bol++;
                        item->command = i;
                        break;
                }
-       if (i >= ARRAY_SIZE(todo_command_strings))
+       if (i >= ARRAY_SIZE(todo_command_info))
                return -1;
 
        if (item->command == TODO_NOOP) {
@@ -1287,7 +1294,7 @@ static int walk_revs_populate_todo(struct todo_list *todo_list,
 {
        enum todo_command command = opts->action == REPLAY_PICK ?
                TODO_PICK : TODO_REVERT;
-       const char *command_string = todo_command_strings[command];
+       const char *command_string = todo_command_info[command].str;
        struct commit *commit;
 
        if (prepare_revs(opts))