Le 12/10/2018 à 11:54, Phillip Wood a écrit : > On 11/10/2018 17:57, Alban Gruin wrote: > > Hi Phillip, > > > > thanks for taking the time to review my patches. > > > > Le 11/10/2018 à 13:25, Phillip Wood a écrit : > >> On 07/10/2018 20:54, Alban Gruin wrote: > >>> @@ -4419,15 +4406,38 @@ int sequencer_add_exec_commands(const char > >>> *commands) > >>> } > >>> /* insert or append final <commands> */ > >>> - if (insert >= 0 && insert < todo_list.nr) > >>> - strbuf_insert(buf, todo_list.items[insert].offset_in_buf + > >>> + if (insert >= 0 && insert < todo_list->nr) > >>> + strbuf_insert(buf, todo_list->items[insert].offset_in_buf + > >>> offset, commands, commands_len); > >>> else if (insert >= 0 || !offset) > >>> strbuf_add(buf, commands, commands_len); > >>> - i = write_message(buf->buf, buf->len, todo_file, 0); > >>> + if (todo_list_parse_insn_buffer(buf->buf, todo_list)) > >>> + BUG("unusable todo list");} > >> > >> It is a shame to have to re-parse the todo list, I wonder how difficult > >> it would be to adjust the todo_list item array as the exec commands are > >> inserted. The same applies to the next couple of patches > > > > Good question. > > > > This function inserts an `exec' command after every `pick' command. > > These commands are stored in a dynamically allocated list, grew with > > ALLOW_GROW(). > > > > If we want to keep the current structure, we would have to grow the size > > of the list by 1 and move several element to the end every time we want > > to add an `exec' command. It would not be very effective. Perhaps I > > should use a linked list here, instead. It may also work well with > > rearrange_squash() and skip_unnecessary_picks(). > > > > Maybe we could even get rid of the strbuf at some point. > > Another way would be to use the strbuf as a string pool rather than a > copy of the text of the file. There could be a write_todo_list() > function that takes a todo list and some flags, iterates over the items > in the todo list and writes the file. The flags would specify whether to > append the todo help and whether to abbreviate the object ids (so there > is no need for a separate call to transform_todos()). Then > add_exec_commands() could allocate a new array of todo items which it > builds up as it works through the original list and replaces the > original list with the new one at the end. The text of the exec items > can be added to the end of the strbuf (we only need one copy of the exec > text with this scheme). rearrange_squash() can use a temporary array to > build a new list as well or just memmove() things but that might be > slower if there is a lot of rearrangement to do. skip_unecessary_picks() > could just set the current item to the one we want to start with. > This sounds good, and it looks like the solution dscho proposed on IRC a few hours ago[0]. I will try to do this. [0] http://colabti.org/irclogger/irclogger_log/git-devel?date=2018-10-12#l46 Cheers, Alban