diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2016-10-21 14:25:00 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-10-21 09:32:34 -0700 |
commit | c22f7dfb0c34da55390d820ff69b9568a3be4a46 (patch) | |
tree | 05556de98957ed0c9e058f4bcd020a55510b0e79 | |
parent | sequencer: get rid of the subcommand field (diff) | |
download | tgif-c22f7dfb0c34da55390d820ff69b9568a3be4a46.tar.xz |
sequencer: remember the onelines when parsing the todo file
The `git-rebase-todo` file contains a list of commands. Most of those
commands have the form
<verb> <sha1> <oneline>
The <oneline> is displayed primarily for the user's convenience, as
rebase -i really interprets only the <verb> <sha1> part. However, there
are *some* places in interactive rebase where the <oneline> is used to
display messages, e.g. for reporting at which commit we stopped.
So let's just remember it when parsing the todo file; we keep a copy of
the entire todo file anyway (to write out the new `done` and
`git-rebase-todo` file just before processing each command), so all we
need to do is remember the begin offsets and lengths.
As we will have to parse and remember the command-line for `exec` commands
later, we do not call the field "oneline" but rather "arg" (and will reuse
that for exec's command-line).
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | sequencer.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sequencer.c b/sequencer.c index 9f22c5ec41..3d1fdacc54 100644 --- a/sequencer.c +++ b/sequencer.c @@ -706,6 +706,8 @@ static int read_and_refresh_cache(struct replay_opts *opts) struct todo_item { enum todo_command command; struct commit *commit; + const char *arg; + int arg_len; size_t offset_in_buf; }; @@ -757,6 +759,9 @@ static int parse_insn_line(struct todo_item *item, const char *bol, char *eol) status = get_sha1(bol, commit_sha1); *end_of_object_name = saved; + item->arg = end_of_object_name + strspn(end_of_object_name, " \t"); + item->arg_len = (int)(eol - item->arg); + if (status < 0) return -1; @@ -907,6 +912,8 @@ static int walk_revs_populate_todo(struct todo_list *todo_list, item->command = command; item->commit = commit; + item->arg = NULL; + item->arg_len = 0; item->offset_in_buf = todo_list->buf.len; subject_len = find_commit_subject(commit_buffer, &subject); strbuf_addf(&todo_list->buf, "%s %s %.*s\n", command_string, |