Alban Gruin <alban.gruin@xxxxxxxxx> writes: > At the center of the "interactive" part of the interactive rebase lies > the todo list. When the user starts an interactive rebase, a todo list > is generated, presented to the user (who then edits it using a text > editor), read back, and then is checked and processed before the actual > rebase takes place. > > Some of this processing includes adding execs commands, reordering > fixup! and squash! commits, and checking if no commits were accidentally > dropped by the user. > > Before I converted the interactive rebase in C, these functions were > called by git-rebase--interactive.sh through git-rebase--helper. Since > the only way to pass around a large amount of data between a shell > script and a C program is to use a file (or any declination of a file), > the functions that checked and processed the todo list were directly > working on a file, the same file that the user edited. > > During the conversion, I did not address this issue, which lead to a > complete_action() that reads the todo list file, does some computation > based on its content, and writes it back to the disk, several times in > the same function. > > As it is not an efficient way to handle a data structure, this patch > series refactor the functions that processes the todo list to work on a > todo_list structure instead of reading it from the disk. > > Some commits consists in modifying edit_todo_list() (initially used by > --edit-todo) to handle the initial edition of the todo list, to increase > code sharing. > > It is based onto ag/rebase-i-in-c (34b4731, "rebase -i: move > rebase--helper modes to rebase--interactive"). As there are quite a lot of fixes to the sequencer machinery since that topic forked from the mainline. For example, [06/16] has unpleasant merge conflicts with 1ace63bc ("rebase --exec: make it work with --rebase-merges", 2018-08-09) that has been in master for the past couple of months. IOW, the tip of ag/rebase-i-in-c is a bit too old a base to work on by now. I think I queued the previous round on the result of merging ag/rebase-i-in-c into master, i.e. 61dc7b24 ("Merge branch 'ag/rebase-i-in-c' into ag/sequencer-reduce-rewriting-todo", 2018-10-09). That may be a more reasonable place to start this update on.