From: Alban Gruin <alban.gruin@gmail.com> To: phillip.wood@dunelm.org.uk, Git Mailing List <git@vger.kernel.org> Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>, Junio C Hamano <gitster@pobox.com> Subject: Re: [PATCH v7 07/16] sequencer: refactor sequencer_add_exec_commands() to work on a todo_list Date: Tue, 12 Feb 2019 16:21:24 +0100 [thread overview] Message-ID: <d334fd63-4053-7034-64f9-eee82bdd06c2@gmail.com> (raw) In-Reply-To: <4c8f904a-329c-a42c-c2a4-06d5b348dce3@talktalk.net> Hi Phillip, Le 12/02/2019 à 11:52, Phillip Wood a écrit : > Hi Alban > > I think this is almost there, I've got a couple of small comments below. > > On 10/02/2019 13:26, Alban Gruin wrote: >> -%<- >> diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c >> index df19ccaeb9..c131fd4a27 100644 >> --- a/builtin/rebase--interactive.c >> +++ b/builtin/rebase--interactive.c >> -%<- >> @@ -221,6 +222,11 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) >> warning(_("--[no-]rebase-cousins has no effect without " >> "--rebase-merges")); >> >> + if (cmd && *cmd) { >> + string_list_split(&commands, cmd, '\n', -1); > > I'd suggest a comment along the lines of > /* As cmd always ends with a newline the last item is empty */ > >> + --commands.nr; > > Style: commands.nr-- > >> + } >> + >> switch (command) { >> case NONE: >> if (!onto && !upstream) >> @@ -228,7 +234,7 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) >> >> ret = do_interactive_rebase(&opts, flags, switch_to, upstream, onto, >> onto_name, squash_onto, head_name, restrict_revision, >> - raw_strategies, cmd, autosquash); >> + raw_strategies, &commands, autosquash); >> break; >> case SKIP: { >> struct string_list merge_rr = STRING_LIST_INIT_DUP; >> @@ -262,11 +268,12 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix) >> ret = rearrange_squash(the_repository); >> break; >> case ADD_EXEC: >> - ret = sequencer_add_exec_commands(the_repository, cmd); >> + ret = sequencer_add_exec_commands(the_repository, &commands); >> break; >> default: >> BUG("invalid command '%d'", command); >> } > > Before freeing the string list it would be good to reset the number of > items with commands.nr++ (with a comment explaining why) so the NUL in > the last item gets freed. > >> + string_list_clear(&commands, 1); > > As we don't use item.util I think the second argument would be better as 0. > >> return !!ret; >> } FWIW I just stumbled across string_list_remove_empty_items(), which seems to do exactly the same thing, but that way we don’t have to do this kind of hacks. >> diff --git a/sequencer.c b/sequencer.c >> index 99e12c751e..82ca3432cd 100644 >> --- a/sequencer.c >> +++ b/sequencer.c >> @@ -4505,21 +4505,27 @@ int sequencer_make_script(struct repository *r, FILE *out, >> * Add commands after pick and (series of) squash/fixup commands >> * in the todo list. >> */ >> -int sequencer_add_exec_commands(struct repository *r, >> - const char *commands) >> +static void todo_list_add_exec_commands(struct todo_list *todo_list, >> + struct string_list *commands) >> { >> - const char *todo_file = rebase_path_todo(); >> - struct todo_list todo_list = TODO_LIST_INIT; >> - struct strbuf *buf = &todo_list.buf; >> - size_t offset = 0, commands_len = strlen(commands); >> - int i, insert; >> + struct strbuf *buf = &todo_list->buf; >> + size_t base_offset = buf->len; >> + int i, insert, nr = 0, alloc = 0; >> + struct todo_item *items = NULL, *base_items = NULL; >> >> - if (strbuf_read_file(&todo_list.buf, todo_file, 0) < 0) >> - return error(_("could not read '%s'."), todo_file); >> + base_items = xcalloc(commands->nr, sizeof(struct todo_item)); >> + for (i = 0; i < commands->nr; i++) { >> + size_t command_len = strlen(commands->items[i].string); >> >> - if (todo_list_parse_insn_buffer(r, todo_list.buf.buf, &todo_list)) { >> - todo_list_release(&todo_list); >> - return error(_("unusable todo list: '%s'"), todo_file); >> + strbuf_addstr(buf, commands->items[i].string); >> + strbuf_addch(buf, '\n'); >> + >> + base_items[i].command = TODO_EXEC; >> + base_items[i].offset_in_buf = base_offset; >> + base_items[i].arg_offset = base_offset + strlen("exec "); >> + base_items[i].arg_len = command_len - strlen("exec "); >> + >> + base_offset += command_len + 1; >> } >> >> /* >> @@ -4527,39 +4533,60 @@ int sequencer_add_exec_commands(struct repository *r, >> * are considered part of the pick, so we insert the commands *after* >> * those chains if there are any. >> */ >> - insert = -1; >> - for (i = 0; i < todo_list.nr; i++) { >> - enum todo_command command = todo_list.items[i].command; >> - >> - if (insert >= 0) { >> - /* skip fixup/squash chains */ >> - if (command == TODO_COMMENT) >> - continue; >> - else if (is_fixup(command)) { >> - insert = i + 1; >> - continue; >> - } >> - strbuf_insert(buf, >> - todo_list.items[insert].offset_in_buf + >> - offset, commands, commands_len); >> - offset += commands_len; >> - insert = -1; > > I like the simplification of using insert as a flag. Perhaps we should > document the assumptions. Maybe something like > > We insert the exec commands immediately after rearranging any fixups and > before the user edits the list. This means that a fixup chain can never > contain comments (any comments are empty picks that have been commented > out the the user did not specify --keep-empty) and so it is safe to > insert the exec command without looking at the command following the > comment. > I slightly reworded this and added it to the existing comment just before the for loop: /* * Insert <commands> after every pick. Here, fixup/squash chains * are considered part of the pick, so we insert the commands *after* * those chains if there are any. * * As we insert the exec commands immediatly after rearranging * any fixups and before the user edits the list, a fixup chain * can never contain comments (any comments are empty picks that * have been commented out because the user did not specify * --keep-empty). So, it is safe to insert an exec command * without looking at the command following a comment. */ >> + insert = 0; >> + for (i = 0; i < todo_list->nr; i++) { >> + enum todo_command command = todo_list->items[i].command; >> + if (insert && !is_fixup(command)) { >> + ALLOC_GROW(items, nr + commands->nr, alloc); >> + COPY_ARRAY(items + nr, base_items, commands->nr); >> + nr += commands->nr; >> + >> + insert = 0; >> } >> >> - if (command == TODO_PICK || command == TODO_MERGE) >> - insert = i + 1; >> + ALLOC_GROW(items, nr + 1, alloc); >> + items[nr++] = todo_list->items[i]; >> + >> + if (command == TODO_PICK || command == TODO_MERGE || is_fixup(command)) > > I'm not sure what the is_fixup() is for, if the command is a fixup then > it will have been preceded by a pick or merge so insert will already be 1 > > I feel a bit mean suggesting a reroll when we're on v7 already but I > think these clean-ups would improve the maintainability of the code. > I'll take a look at the rest of the changes to this series sometime this > week. > > Best Wishes > > Phillip > Cheers, Alban
next prev parent reply other threads:[~2019-02-12 15:21 UTC|newest] Thread overview: 190+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-10-07 19:54 [PATCH 00/15] sequencer: refactor functions working " Alban Gruin 2018-10-07 19:54 ` [PATCH 01/15] sequencer: clear the number of items of a todo_list before parsing Alban Gruin 2018-10-07 19:54 ` [PATCH 02/15] sequencer: make the todo_list structure public Alban Gruin 2018-10-07 19:54 ` [PATCH 03/15] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2018-10-11 11:23 ` Phillip Wood 2018-10-07 19:54 ` [PATCH 04/15] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2018-10-11 11:25 ` Phillip Wood 2018-10-11 16:57 ` Alban Gruin 2018-10-12 9:54 ` Phillip Wood 2018-10-12 12:23 ` Alban Gruin 2018-10-07 19:54 ` [PATCH 05/15] sequencer: refactor rearrange_squash() " Alban Gruin 2018-10-07 19:54 ` [PATCH 06/15] sequencer: refactor transform_todos() " Alban Gruin 2018-10-07 19:54 ` [PATCH 07/15] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2018-10-12 10:01 ` SZEDER Gábor 2018-10-19 8:16 ` Junio C Hamano 2018-10-19 9:27 ` SZEDER Gábor 2018-10-07 19:54 ` [PATCH 08/15] sequencer: change complete_action() to use the refactored functions Alban Gruin 2018-10-11 13:51 ` Phillip Wood 2018-10-11 17:06 ` Alban Gruin 2018-10-07 19:54 ` [PATCH 09/15] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2018-10-07 19:54 ` [PATCH 10/15] rebase-interactive: use todo_list_transform() in edit_todo_list() Alban Gruin 2018-10-11 15:16 ` Phillip Wood 2018-10-11 19:58 ` Alban Gruin 2018-10-07 19:54 ` [PATCH 11/15] rebase-interactive: append_todo_help() changes Alban Gruin 2018-10-07 19:54 ` [PATCH 12/15] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2018-10-07 19:54 ` [PATCH 13/15] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2018-10-07 19:54 ` [PATCH 14/15] sequencer: fix a call to error() in transform_todo_file() Alban Gruin 2018-10-07 19:54 ` [PATCH 15/15] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2018-10-07 20:51 ` [PATCH 00/15] sequencer: refactor functions working on a todo_list Alban Gruin 2018-10-27 21:29 ` [PATCH v2 00/16] " Alban Gruin 2018-10-27 21:29 ` [PATCH v2 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2018-10-27 21:29 ` [PATCH v2 02/16] sequencer: make the todo_list structure public Alban Gruin 2018-10-27 21:29 ` [PATCH v2 03/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2018-10-27 21:29 ` [PATCH v2 04/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2018-10-30 16:28 ` Phillip Wood 2018-11-01 23:31 ` Alban Gruin 2018-10-27 21:29 ` [PATCH v2 05/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2018-10-27 21:29 ` [PATCH v2 06/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2018-10-30 16:47 ` Phillip Wood 2018-11-01 23:31 ` Alban Gruin 2018-11-02 10:09 ` Phillip Wood 2018-11-02 16:26 ` Alban Gruin 2018-11-02 17:09 ` Phillip Wood 2018-10-27 21:29 ` [PATCH v2 07/16] sequencer: refactor rearrange_squash() " Alban Gruin 2018-10-27 21:29 ` [PATCH v2 08/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2018-10-27 21:29 ` [PATCH v2 09/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2018-10-27 21:29 ` [PATCH v2 10/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2018-10-27 21:29 ` [PATCH v2 11/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2018-10-27 21:29 ` [PATCH v2 12/16] rebase-interactive: append_todo_help() changes Alban Gruin 2018-10-27 21:29 ` [PATCH v2 13/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2018-10-27 21:29 ` [PATCH v2 14/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2018-10-27 21:29 ` [PATCH v2 15/16] sequencer: fix a call to error() in transform_todo_file() Alban Gruin 2018-10-27 21:29 ` [PATCH v2 16/16] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2018-10-29 3:05 ` [PATCH v2 00/16] sequencer: refactor functions working on a todo_list Junio C Hamano 2018-10-29 15:34 ` Alban Gruin 2018-11-09 8:07 ` [PATCH v3 " Alban Gruin 2018-11-09 8:07 ` [PATCH v3 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2018-11-09 8:07 ` [PATCH v3 02/16] sequencer: make the todo_list structure public Alban Gruin 2018-11-09 8:07 ` [PATCH v3 03/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2018-11-09 8:07 ` [PATCH v3 04/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2018-11-09 8:07 ` [PATCH v3 05/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2018-11-09 8:07 ` [PATCH v3 06/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2018-11-30 17:02 ` Phillip Wood 2018-11-30 19:06 ` Johannes Schindelin 2018-12-10 14:33 ` Phillip Wood 2018-12-28 19:42 ` Alban Gruin 2018-11-09 8:07 ` [PATCH v3 07/16] sequencer: refactor rearrange_squash() " Alban Gruin 2018-11-09 8:07 ` [PATCH v3 08/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2018-11-09 8:07 ` [PATCH v3 09/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2018-11-09 8:07 ` [PATCH v3 10/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2018-11-09 8:08 ` [PATCH v3 11/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2018-11-09 8:08 ` [PATCH v3 12/16] rebase-interactive: append_todo_help() changes Alban Gruin 2018-11-09 8:08 ` [PATCH v3 13/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2018-11-09 8:08 ` [PATCH v3 14/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2018-11-09 8:08 ` [PATCH v3 15/16] sequencer: fix a call to error() in transform_todo_file() Alban Gruin 2018-11-09 8:08 ` [PATCH v3 16/16] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2018-12-29 16:03 ` [PATCH v4 00/16] sequencer: refactor functions working on a todo_list Alban Gruin 2018-12-29 16:03 ` [PATCH v4 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2018-12-29 16:03 ` [PATCH v4 02/16] sequencer: make the todo_list structure public Alban Gruin 2018-12-29 16:04 ` [PATCH v4 03/16] sequencer: remove the 'arg' field from todo_item Alban Gruin 2019-01-21 14:59 ` Phillip Wood 2019-01-22 15:27 ` Johannes Schindelin 2018-12-29 16:04 ` [PATCH v4 04/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2018-12-29 16:04 ` [PATCH v4 05/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2018-12-29 16:04 ` [PATCH v4 06/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2018-12-29 16:04 ` [PATCH v4 07/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2018-12-29 16:04 ` [PATCH v4 08/16] sequencer: refactor rearrange_squash() " Alban Gruin 2018-12-29 16:04 ` [PATCH v4 09/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2018-12-29 16:04 ` [PATCH v4 10/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2018-12-29 16:04 ` [PATCH v4 11/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2018-12-29 16:04 ` [PATCH v4 12/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2018-12-29 16:04 ` [PATCH v4 13/16] rebase-interactive: append_todo_help() changes Alban Gruin 2018-12-29 16:04 ` [PATCH v4 14/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2018-12-29 16:04 ` [PATCH v4 15/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2018-12-29 16:04 ` [PATCH v4 16/16] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2019-01-23 20:58 ` [PATCH v5 00/16] sequencer: refactor functions working on a todo_list Alban Gruin 2019-01-23 20:58 ` [PATCH v5 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2019-01-23 20:58 ` [PATCH v5 02/16] sequencer: make the todo_list structure public Alban Gruin 2019-01-23 20:58 ` [PATCH v5 03/16] sequencer: remove the 'arg' field from todo_item Alban Gruin 2019-01-23 20:58 ` [PATCH v5 04/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2019-01-23 20:58 ` [PATCH v5 05/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2019-01-23 20:58 ` [PATCH v5 06/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2019-01-23 20:58 ` [PATCH v5 07/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2019-01-23 20:58 ` [PATCH v5 08/16] sequencer: refactor rearrange_squash() " Alban Gruin 2019-01-23 20:58 ` [PATCH v5 09/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2019-01-23 20:58 ` [PATCH v5 10/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2019-01-23 20:58 ` [PATCH v5 11/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2019-01-23 20:58 ` [PATCH v5 12/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2019-01-23 20:58 ` [PATCH v5 13/16] rebase-interactive: append_todo_help() changes Alban Gruin 2019-01-23 20:58 ` [PATCH v5 14/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2019-01-23 20:58 ` [PATCH v5 15/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2019-01-23 20:58 ` [PATCH v5 16/16] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2019-01-24 21:54 ` [PATCH v5 00/16] sequencer: refactor functions working on a todo_list Junio C Hamano 2019-01-24 22:43 ` Alban Gruin 2019-01-29 15:01 ` [PATCH v6 " Alban Gruin 2019-01-29 15:01 ` [PATCH v6 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2019-01-29 15:01 ` [PATCH v6 02/16] sequencer: make the todo_list structure public Alban Gruin 2019-01-29 15:01 ` [PATCH v6 03/16] sequencer: remove the 'arg' field from todo_item Alban Gruin 2019-01-29 15:01 ` [PATCH v6 04/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2019-01-29 15:01 ` [PATCH v6 05/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2019-01-29 15:01 ` [PATCH v6 06/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2019-01-29 15:01 ` [PATCH v6 07/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2019-01-31 14:30 ` Phillip Wood 2019-01-31 20:37 ` Alban Gruin 2019-01-31 20:46 ` Phillip Wood 2019-02-01 14:51 ` Phillip Wood 2019-02-02 15:09 ` Alban Gruin 2019-02-07 11:09 ` Phillip Wood 2019-01-29 15:01 ` [PATCH v6 08/16] sequencer: refactor rearrange_squash() " Alban Gruin 2019-01-29 15:01 ` [PATCH v6 09/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2019-01-29 15:01 ` [PATCH v6 10/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2019-01-29 20:14 ` Junio C Hamano 2019-01-29 20:33 ` Alban Gruin 2019-01-29 21:55 ` Junio C Hamano 2019-01-29 15:01 ` [PATCH v6 11/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2019-02-07 11:06 ` Phillip Wood 2019-01-29 15:01 ` [PATCH v6 12/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2019-01-29 15:01 ` [PATCH v6 13/16] rebase-interactive: append_todo_help() changes Alban Gruin 2019-01-29 15:01 ` [PATCH v6 14/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2019-02-01 11:03 ` Phillip Wood 2019-02-02 14:40 ` Alban Gruin 2019-02-06 21:11 ` Alban Gruin 2019-02-08 10:56 ` Phillip Wood 2019-01-29 15:01 ` [PATCH v6 15/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2019-01-29 15:01 ` [PATCH v6 16/16] rebase--interactive: move transform_todo_file() to rebase--interactive.c Alban Gruin 2019-02-01 11:15 ` Phillip Wood 2019-02-02 15:05 ` Alban Gruin 2019-02-10 13:26 ` [PATCH v7 00/16] sequencer: refactor functions working on a todo_list Alban Gruin 2019-02-10 13:26 ` [PATCH v7 01/16] sequencer: changes in parse_insn_buffer() Alban Gruin 2019-02-10 13:26 ` [PATCH v7 02/16] sequencer: make the todo_list structure public Alban Gruin 2019-02-10 13:26 ` [PATCH v7 03/16] sequencer: remove the 'arg' field from todo_item Alban Gruin 2019-02-10 13:26 ` [PATCH v7 04/16] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2019-02-10 13:26 ` [PATCH v7 05/16] sequencer: introduce todo_list_write_to_file() Alban Gruin 2019-02-10 13:26 ` [PATCH v7 06/16] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2019-02-10 13:26 ` [PATCH v7 07/16] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2019-02-12 10:52 ` Phillip Wood 2019-02-12 15:21 ` Alban Gruin [this message] 2019-02-13 10:03 ` Phillip Wood 2019-02-10 13:26 ` [PATCH v7 08/16] sequencer: refactor rearrange_squash() " Alban Gruin 2019-02-10 13:26 ` [PATCH v7 09/16] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2019-02-10 13:26 ` [PATCH v7 10/16] sequencer: change complete_action() to use the refactored functions Alban Gruin 2019-02-10 13:26 ` [PATCH v7 11/16] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2019-02-13 10:05 ` Phillip Wood 2019-02-10 13:26 ` [PATCH v7 12/16] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2019-02-10 13:26 ` [PATCH v7 13/16] rebase-interactive: append_todo_help() changes Alban Gruin 2019-02-10 13:26 ` [PATCH v7 14/16] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2019-02-13 10:10 ` Phillip Wood 2019-02-10 13:26 ` [PATCH v7 15/16] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2019-02-10 13:26 ` [PATCH v7 16/16] rebase--interactive: move several functions to rebase--interactive.c Alban Gruin 2019-02-13 10:17 ` Phillip Wood 2019-03-05 19:17 ` [PATCH v8 00/18] sequencer: refactor functions working on a todo_list Alban Gruin 2019-03-05 19:17 ` [PATCH v8 01/18] sequencer: changes in parse_insn_buffer() Alban Gruin 2019-03-05 19:17 ` [PATCH v8 02/18] sequencer: make the todo_list structure public Alban Gruin 2019-03-05 19:17 ` [PATCH v8 03/18] sequencer: remove the 'arg' field from todo_item Alban Gruin 2019-03-05 19:17 ` [PATCH v8 04/18] sequencer: refactor transform_todos() to work on a todo_list Alban Gruin 2019-03-05 19:17 ` [PATCH v8 05/18] sequencer: introduce todo_list_write_to_file() Alban Gruin 2019-03-05 19:17 ` [PATCH v8 06/18] sequencer: refactor check_todo_list() to work on a todo_list Alban Gruin 2019-03-05 19:17 ` [PATCH v8 07/18] sequencer: refactor sequencer_add_exec_commands() " Alban Gruin 2019-03-05 19:17 ` [PATCH v8 08/18] sequencer: refactor rearrange_squash() " Alban Gruin 2019-03-05 19:17 ` [PATCH v8 09/18] sequencer: make sequencer_make_script() write its script to a strbuf Alban Gruin 2019-03-05 19:17 ` [PATCH v8 10/18] sequencer: change complete_action() to use the refactored functions Alban Gruin 2019-03-05 19:17 ` [PATCH v8 11/18] rebase--interactive: move sequencer_add_exec_commands() Alban Gruin 2019-03-05 19:17 ` [PATCH v8 12/18] rebase--interactive: move rearrange_squash_in_todo_file() Alban Gruin 2019-03-05 19:18 ` [PATCH v8 13/18] sequencer: refactor skip_unnecessary_picks() to work on a todo_list Alban Gruin 2019-03-05 19:18 ` [PATCH v8 14/18] rebase-interactive: use todo_list_write_to_file() in edit_todo_list() Alban Gruin 2019-03-05 19:18 ` [PATCH v8 15/18] rebase-interactive: append_todo_help() changes Alban Gruin 2019-03-05 19:18 ` [PATCH v8 16/18] rebase-interactive: rewrite edit_todo_list() to handle the initial edit Alban Gruin 2019-03-05 19:18 ` [PATCH v8 17/18] sequencer: use edit_todo_list() in complete_action() Alban Gruin 2019-03-05 19:18 ` [PATCH v8 18/18] rebase--interactive: move transform_todo_file() Alban Gruin 2019-03-13 10:45 ` [PATCH v8 00/18] sequencer: refactor functions working on a todo_list Phillip Wood
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=d334fd63-4053-7034-64f9-eee82bdd06c2@gmail.com \ --to=alban.gruin@gmail.com \ --cc=Johannes.Schindelin@gmx.de \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=phillip.wood@dunelm.org.uk \ --subject='Re: [PATCH v7 07/16] sequencer: refactor sequencer_add_exec_commands() to work on a todo_list' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).