This patch series marks the '4' in the countdown to speed up rebase -i by implementing large parts in C. It is based on the `libify-sequencer` patch series that I submitted last week. The patches in this series merely prepare the sequencer code for the next patch series that actually teaches the sequencer to run an interactive rebase. The reason to split these two patch series is simple: to keep them at a sensible size. The two patch series after that are much smaller: a two-patch "series" that switches rebase -i to use the sequencer (except with --root or --preserve-merges), and a couple of patches to move several pretty expensive script processing steps to C (think: autosquash). The end game of this patch series is a git-rebase--helper that makes rebase -i 5x faster on Windows (according to t/perf/p3404). Travis says that even MacOSX and Linux benefit (4x and 3x, respectively). I have been working on this since early February, whenever time allowed, and it is time to put it into the users' hands. To that end, I will most likely submit the remaining three patch series in the next two days, and integrate the whole shebang into Git for Windows 2.10.0. Therefore I would be most grateful for every in-depth review. Johannes Schindelin (22): sequencer: use static initializers for replay_opts sequencer: use memoized sequencer directory path sequencer: avoid unnecessary indirection sequencer: future-proof remove_sequencer_state() sequencer: allow the sequencer to take custody of malloc()ed data sequencer: release memory that was allocated when reading options sequencer: future-proof read_populate_todo() sequencer: remove overzealous assumption sequencer: completely revamp the "todo" script parsing sequencer: avoid completely different messages for different actions sequencer: get rid of the subcommand field sequencer: refactor the code to obtain a short commit name sequencer: remember the onelines when parsing the todo file sequencer: prepare for rebase -i's commit functionality sequencer: introduce a helper to read files written by scripts sequencer: prepare for rebase -i's GPG settings sequencer: allow editing the commit message on a case-by-case basis sequencer: support amending commits sequencer: support cleaning up commit messages sequencer: remember do_recursive_merge()'s return value sequencer: left-trim the lines read from the script sequencer: refactor write_message() builtin/commit.c | 2 +- builtin/revert.c | 42 ++- sequencer.c | 573 +++++++++++++++++++++++++++------------- sequencer.h | 27 +- t/t3510-cherry-pick-sequence.sh | 11 - 5 files changed, 428 insertions(+), 227 deletions(-) Based-On: libify-sequencer at https://github.com/dscho/git Fetch-Base-Via: git fetch https://github.com/dscho/git libify-sequencer Published-As: https://github.com/dscho/git/releases/tag/prepare-sequencer-v1 Fetch-It-Via: git fetch https://github.com/dscho/git prepare-sequencer-v1 -- 2.10.0.rc1.114.g2bd6b38 base-commit: 2d6d71e2a2d410b12d783f0a8edd22791f303c12