Skip to content
  • Elijah Newren's avatar
    git-rebase: error out when incompatible options passed · c840e1af
    Elijah Newren authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    git rebase has three different types: am, merge, and interactive, all of
    which are implemented in terms of separate scripts.  am builds on git-am,
    merge builds on git-merge-recursive, and interactive builds on
    git-cherry-pick.  We make use of features in those lower-level commands in
    the different rebase types, but those features don't exist in all of the
    lower level commands so we have a range of incompatibilities.  Previously,
    we just accepted nearly any argument and silently ignored whichever ones
    weren't implemented for the type of rebase specified.  Change this so the
    incompatibilities are documented, included in the testsuite, and tested
    for at runtime with an appropriate error message shown.
    
    Some exceptions I left out:
    
      * --merge and --interactive are technically incompatible since they are
        supposed to run different underlying scripts, but with a few small
        changes, --interactive can do everything that --merge can.  In fact,
        I'll shortly be sending another patch to remove git-rebase--merge and
        reimplement it on top of git-rebase--interactive.
    
      * One could argue that --interactive and --quiet are incompatible since
        --interactive doesn't implement a --quiet mode (perhaps since
        cherry-pick itself does not implement one).  However, the interactive
        mode is more quiet than the other modes in general with progress
        messages, so one could argue that it's already quiet.
    
    Signed-off-by: default avatarElijah Newren <newren@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    c840e1af