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