This patch series reimplements the expensive pre- and post-processing of the todo script in C. And it concludes the work I did to accelerate rebase -i so far. I am still unwilling to replace a compile-time safe way to pass the options to the revision machinery by the alternative (which I am still flabbergasted about) proposed by Junio. This will not change. I know that we want to concentrate on bug fixes on `master`, but this patch series will most likely take a couple of months to get there, anyway. So I may just as well send this iteration now. It's also not like I haven't contributed any bug fixes lately... Changes since v5: - replaced a get_sha1() call by a get_oid() call already. - adjusted to hashmap API changes Johannes Schindelin (10): t3415: verify that an empty instructionFormat is handled as before rebase -i: generate the script via rebase--helper rebase -i: remove useless indentation rebase -i: do not invent onelines when expanding/collapsing SHA-1s rebase -i: also expand/collapse the SHA-1s via the rebase--helper t3404: relax rebase.missingCommitsCheck tests rebase -i: check for missing commits in the rebase--helper rebase -i: skip unnecessary picks using the rebase--helper t3415: test fixup with wrapped oneline rebase -i: rearrange fixup/squash lines using the rebase--helper Documentation/git-rebase.txt | 16 +- builtin/rebase--helper.c | 29 ++- git-rebase--interactive.sh | 373 ++++------------------------- sequencer.c | 531 ++++++++++++++++++++++++++++++++++++++++++ sequencer.h | 8 + t/t3404-rebase-interactive.sh | 22 +- t/t3415-rebase-autosquash.sh | 28 ++- 7 files changed, 647 insertions(+), 360 deletions(-) base-commit: f3da2b79be9565779e4f76dc5812c68e156afdf0 Based-On: rebase--helper at https://github.com/dscho/git Fetch-Base-Via: git fetch https://github.com/dscho/git rebase--helper Published-As: https://github.com/dscho/git/releases/tag/rebase-i-extra-v6 Fetch-It-Via: git fetch https://github.com/dscho/git rebase-i-extra-v6 Interdiff vs v5: diff --git a/sequencer.c b/sequencer.c index 8713cc8d1d5..c54596f9699 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2654,7 +2654,7 @@ int skip_unnecessary_picks(void) if (!read_oneliner(&buf, rebase_path_onto(), 0)) return error(_("could not read 'onto'")); - if (get_sha1(buf.buf, onto_oid.hash)) { + if (get_oid(buf.buf, &onto_oid)) { strbuf_release(&buf); return error(_("need a HEAD to fixup")); } @@ -2756,8 +2756,9 @@ struct subject2item_entry { char subject[FLEX_ARRAY]; }; -static int subject2item_cmp(const struct subject2item_entry *a, - const struct subject2item_entry *b, const void *key) +static int subject2item_cmp(const void *fndata, + const struct subject2item_entry *a, + const struct subject2item_entry *b, const void *key) { return key ? strcmp(a->subject, key) : strcmp(a->subject, b->subject); } @@ -2802,7 +2803,7 @@ int rearrange_squash(void) * be moved to appear after the i'th. */ hashmap_init(&subject2item, (hashmap_cmp_fn) subject2item_cmp, - todo_list.nr); + NULL, todo_list.nr); ALLOC_ARRAY(next, todo_list.nr); ALLOC_ARRAY(tail, todo_list.nr); ALLOC_ARRAY(subjects, todo_list.nr); -- 2.13.3.windows.1.13.gaf0c2223da0