rebase -i --root: let the sequencer handle even the initial part
commit21d0764c823bdca78b99dae562ca9e5c2a121738
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 3 May 2018 23:01:18 +0000 (4 01:01 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 6 May 2018 04:21:58 +0000 (6 13:21 +0900)
treec1562176ef449800869380f172154ee5c80d532c
parentd87d48b2e033e8a8d39afbe7cb5eea331bbe47a6
rebase -i --root: let the sequencer handle even the initial part

In this developer's earlier attempt to accelerate interactive rebases by
converting large parts from Unix shell script into portable, performant
C, the --root handling was specifically excluded (to simplify the task a
little bit; it still took over a year to get that reduced set of patches
into Git proper).

This patch ties up that loose end: now only --preserve-merges uses the
slow Unix shell script implementation to perform the interactive rebase.

As the rebase--helper reports progress to stderr (unlike the scripted
interactive rebase, which reports it to stdout, of all places), we have
to adjust a couple of tests that did not expect that for `git rebase -i
--root`.

This patch fixes -- at long last! -- the really old bug reported in
6a6bc5bdc4d (add tests for rebasing root, 2013-06-06) that rebasing with
--root *always* rewrote the root commit, even if there were no changes.

The bug still persists in --preserve-merges mode, of course, but that
mode will be deprecated as soon as the new --rebase-merges mode
stabilizes, anyway.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh
t/t3404-rebase-interactive.sh
t/t3421-rebase-topology-linear.sh