Skip to content
  • Johannes Schindelin's avatar
    rebase--helper: add a builtin helper for interactive rebases · 4557f1ad
    Johannes Schindelin authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Git's interactive rebase is still implemented as a shell script, despite
    its complexity. This implies that it suffers from the portability point
    of view, from lack of expressibility, and of course also from
    performance. The latter issue is particularly serious on Windows, where
    we pay a hefty price for relying so much on POSIX.
    
    Unfortunately, being such a huge shell script also means that we missed
    the train when it would have been relatively easy to port it to C, and
    instead piled feature upon feature onto that poor script that originally
    never intended to be more than a slightly pimped cherry-pick in a loop.
    
    To open the road toward better performance (in addition to all the other
    benefits of C over shell scripts), let's just start *somewhere*.
    
    The approach taken here is to add a builtin helper that at first intends
    to take care of the parts of the interactive rebase that are most
    affected by the performance penalties mentioned above.
    
    In particular, after we spent all those efforts on preparing the sequencer
    to process rebase -i's git-rebase-todo scripts, we implement the `git
    rebase -i --continue` functionality as a new builtin, git-rebase--helper.
    
    Once that is in place, we can work gradually on tackling the rest of the
    technical debt.
    
    Note that the rebase--helper needs to learn about the transient
    --ff/--no-ff options of git-rebase, as the corresponding flag is not
    persisted to, and re-read from, the state directory.
    
    Signed-off-by: default avatarJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    4557f1ad