summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Alban Gruin <alban.gruin@gmail.com>2018-12-29 17:03:58 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-01-08 13:22:09 -0800
commit2b71595d47a75031346d7bc0125da39a9bb10126 (patch)
tree3ee46e59ba91c6398c9d0e59a330ca4c72480c29
parentMerge branch 'nd/the-index' (diff)
downloadtgif-2b71595d47a75031346d7bc0125da39a9bb10126.tar.xz
sequencer: changes in parse_insn_buffer()
This clears the number of items of a todo_list before parsing it to allow to parse the same list multiple times without issues. As its items are not dynamically allocated, or don’t need to allocate memory, no additionnal memory management is required here. Furthermore, if a line is invalid, the type of the corresponding command is set to a garbage value, and its argument is defined properly. This will allow to recreate the text of a todo list from its commands, even if one of them is incorrect. Signed-off-by: Alban Gruin <alban.gruin@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--sequencer.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sequencer.c b/sequencer.c
index b68bca0bef..d605199a54 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -2141,6 +2141,8 @@ static int parse_insn_buffer(struct repository *r, char *buf,
char *p = buf, *next_p;
int i, res = 0, fixup_okay = file_exists(rebase_path_done());
+ todo_list->current = todo_list->nr = 0;
+
for (i = 1; *p; i++, p = next_p) {
char *eol = strchrnul(p, '\n');
@@ -2154,7 +2156,10 @@ static int parse_insn_buffer(struct repository *r, char *buf,
if (parse_insn_line(r, item, p, eol)) {
res = error(_("invalid line %d: %.*s"),
i, (int)(eol - p), p);
- item->command = TODO_NOOP;
+ item->command = TODO_COMMENT + 1;
+ item->arg = p;
+ item->arg_len = (int)(eol - p);
+ item->commit = NULL;
}
if (fixup_okay)