git-rebase: error out when incompatible options passed
commitc840e1af09fcf9bb4420a504820314b67fbe18d2
authorElijah Newren <newren@gmail.com>
Wed, 27 Jun 2018 07:23:14 +0000 (27 00:23 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Jun 2018 18:23:22 +0000 (27 11:23 -0700)
tree833caa350f80b9a1c73bd98ffa7d92546734bbeb
parent9929430c32f8754de559e00fba65fd978ecd05da
git-rebase: error out when incompatible options passed

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: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase.sh
t/t3422-rebase-incompatible-options.sh