rebase -i -x: add exec commands via the rebase--helper
Recent work on `git-rebase--interactive` aims to convert shell code to C. Even if this is most likely not a big performance enhancement, let's convert it too since a coming change to abbreviate command names requires it to be updated. Signed-off-by: Liam Beguin <liambeguin@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
313a48eaca
commit
0cce4a2756
39
sequencer.c
39
sequencer.c
@ -2494,6 +2494,45 @@ int sequencer_make_script(FILE *out, int argc, const char **argv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add commands after pick and (series of) squash/fixup commands
|
||||
* in the todo list.
|
||||
*/
|
||||
int sequencer_add_exec_commands(const char *commands)
|
||||
{
|
||||
const char *todo_file = rebase_path_todo();
|
||||
struct todo_list todo_list = TODO_LIST_INIT;
|
||||
struct todo_item *item;
|
||||
struct strbuf *buf = &todo_list.buf;
|
||||
size_t offset = 0, commands_len = strlen(commands);
|
||||
int i, first;
|
||||
|
||||
if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0)
|
||||
return error(_("could not read '%s'."), todo_file);
|
||||
|
||||
if (parse_insn_buffer(todo_list.buf.buf, &todo_list)) {
|
||||
todo_list_release(&todo_list);
|
||||
return error(_("unusable todo list: '%s'"), todo_file);
|
||||
}
|
||||
|
||||
first = 1;
|
||||
/* insert <commands> before every pick except the first one */
|
||||
for (item = todo_list.items, i = 0; i < todo_list.nr; i++, item++) {
|
||||
if (item->command == TODO_PICK && !first) {
|
||||
strbuf_insert(buf, item->offset_in_buf + offset,
|
||||
commands, commands_len);
|
||||
offset += commands_len;
|
||||
}
|
||||
first = 0;
|
||||
}
|
||||
|
||||
/* append final <commands> */
|
||||
strbuf_add(buf, commands, commands_len);
|
||||
|
||||
i = write_message(buf->buf, buf->len, todo_file, 0);
|
||||
todo_list_release(&todo_list);
|
||||
return i;
|
||||
}
|
||||
|
||||
int transform_todos(unsigned flags)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user