Re: [PATCH 13/22] sequencer: remember the onelines when parsing the todo file
From: Jakub Narębski <hidden>
Date: 2016-08-31 18:38:05
W dniu 29.08.2016 o 10:05, Johannes Schindelin pisze:
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 and end offsets.
Actually what we remember is pointer and length, or begin offset and length, not offset and offset.
Signed-off-by: Johannes Schindelin <redacted>
Nice, I'll see how it is used later (and in which commit in series).
quoted hunk ↗ jump to hunk
--- sequencer.c | 7 +++++++ 1 file changed, 7 insertions(+)diff --git a/sequencer.c b/sequencer.c index 06759d4..3398774 100644 --- a/sequencer.c +++ b/sequencer.c@@ -709,6 +709,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;
Why 'arg', and not 'oneline', or 'subject'? I'm not saying it is bad name.
quoted hunk ↗ jump to hunk
size_t offset_in_buf; };@@ -760,6 +762,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); +
Does it work correctly for line without <oneline>, that is <verb> <sha1> I think it does, but I not entirely sure.
quoted hunk ↗ jump to hunk
if (status < 0) return -1;@@ -880,6 +885,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",