prepare-sequencer-v2
dscho
tagged this
11 Sep 10:49
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. Changes vs v1: - clarified why the code refactoring into the short_commit_name() function is desirable. - fixed a typo in a commit message (s/se/so/). - removed a bogus call to read_and_refresh_cache(opts) that was added to sequencer_rollback() by mistake. - clarified in the commit message why the TODO_LIST_INIT macro does not assign all-zeroes. - converted IS_REBASE_I() into an inline function. - clarified the comment about retaining author metadata when calling sequencer_commit() in rebase -i mode. - simplified TODO_LIST_INIT and REPLAY_OPTS_INIT. - added an example how to use sequencer_entrust() to the commit message introducing it. - the gpg_sign option's value is now also entrusted to the sequencer (i.e. it is released in sequencer_remove_state()). - renamed the "set_me_free_after_use" to "to_free". Since that is still not a self-explanatory name, add a comment to the function declaration. - clarified in the "completely revamped todo parsing" commit message that the main benefit of the early parsing is for rebase -i. - start the `enum todo_command` with TODO_PICK that is explicitly assigned the value 0. - an error was marked as translatable. - converted one forgotten git_path_todo_file() to use get_todo_path(opts) instead. - fixed numbering of "malformed instruction sheet"s after removing one. - reintroduced the overzealous assumption that todo scripts can only perform revert commands during `git revert` and pick commands during `git cherry-pick`. This overzealous assumption is *still* disabled in rebase -i mode, of course. - clarified in the commit message why we call the field "arg", not "oneline", and fixed the description that claimed that we store the end offset (we store the length instead). - clarified in the commit message of "allow editing the commit message on a case-by-case basis" that we are talking about the sequencer_commit() function, and how things were done previously. - some grammar touch-ups. - marked a couple of error messages for translation. - explicitly assign the first todo_command the value 0, so that we can be certain that the array of command strings matches up. - removed code to skip CR/LF at the end of line after reading with read_oneliner(): That function already ensures that. - ensured that the todo_list is released even when reading/parsing fails. - replaced an error(..., strerror()) call with an error_errno(...) one. - clarified in the commit message why the new todo_list maintains the script as an array instead of a linked list. - renamed the append_todo() function into append_new_todo(), to explain better what the function does and why it does not take the values as parameters that should populate the new todo_item. - marked action_name() for translation. - surrounded all file names in error messages in sequencer.c with single quotes, for consistency. - removed a bogus hint for translators that asked them to translate commands of the git-rebase-todo file (or cherry-pick's equivalent). - turned capitals after semicolons to lower-case. Johannes Schindelin (25): 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: 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 lines read from the script sequencer: refactor write_message() sequencer: remove overzealous assumption in rebase -i mode sequencer: mark action_name() for translation sequencer: quote filenames in error messages sequencer: remove bogus hint for translators builtin/commit.c | 2 +- builtin/revert.c | 42 ++-- sequencer.c | 632 +++++++++++++++++++++++++++++++++++++------------------ sequencer.h | 31 +-- 4 files changed, 468 insertions(+), 239 deletions(-) Submitted-As: https://public-inbox.org/git/cover.1473590966.git.johannes.schindelin@gmx.de In-Reply-To: https://public-inbox.org/git/cover.1472457609.git.johannes.schindelin@gmx.de
Assets 2
-
2016-09-11T10:49:26Z -
2016-09-11T10:49:26Z - Loading