Make rebase--interactive use OPTIONS_SPEC

Also add some checks that --continue/--abort/--skip
actions are used without --onto, -p, -t, etc.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Stephan Beyer 2008-07-12 17:48:20 +02:00 committed by Junio C Hamano
parent 5352a82bab
commit 7970aaf0fb

View File

@ -10,10 +10,24 @@
# The original idea comes from Eric W. Biederman, in # The original idea comes from Eric W. Biederman, in
# http://article.gmane.org/gmane.comp.version-control.git/22407 # http://article.gmane.org/gmane.comp.version-control.git/22407
USAGE='(--continue | --abort | --skip | [--preserve-merges] [--verbose] OPTIONS_KEEPDASHDASH=
[--onto <branch>] <upstream> [<branch>])' OPTIONS_SPEC="\
git-rebase [-i] [options] [--] <upstream> [<branch>]
git-rebase [-i] (--continue | --abort | --skip)
--
Available options are
v,verbose display a diffstat of what changed upstream
onto= rebase onto given branch instead of upstream
p,preserve-merges try to recreate merges instead of ignoring them
s,strategy= use the given merge strategy
m,merge always used (no-op)
i,interactive always used (no-op)
Actions:
continue continue rebasing process
abort abort rebasing process and restore original branch
skip skip current patch and continue rebasing process
"
OPTIONS_SPEC=
. git-sh-setup . git-sh-setup
require_work_tree require_work_tree
@ -25,10 +39,8 @@ SQUASH_MSG="$DOTEST"/message-squash
REWRITTEN="$DOTEST"/rewritten REWRITTEN="$DOTEST"/rewritten
PRESERVE_MERGES= PRESERVE_MERGES=
STRATEGY= STRATEGY=
ONTO=
VERBOSE= VERBOSE=
test -d "$REWRITTEN" && PRESERVE_MERGES=t
test -f "$DOTEST"/strategy && STRATEGY="$(cat "$DOTEST"/strategy)"
test -f "$DOTEST"/verbose && VERBOSE=t
GIT_CHERRY_PICK_HELP=" After resolving the conflicts, GIT_CHERRY_PICK_HELP=" After resolving the conflicts,
mark the corrected paths with 'git add <paths>', and mark the corrected paths with 'git add <paths>', and
@ -366,10 +378,27 @@ do_rest () {
done done
} }
# check if no other options are set
is_standalone () {
test $# -eq 2 -a "$2" = '--' &&
test -z "$ONTO" &&
test -z "$PRESERVE_MERGES" &&
test -z "$STRATEGY" &&
test -z "$VERBOSE"
}
get_saved_options () {
test -d "$REWRITTEN" && PRESERVE_MERGES=t
test -f "$DOTEST"/strategy && STRATEGY="$(cat "$DOTEST"/strategy)"
test -f "$DOTEST"/verbose && VERBOSE=t
}
while test $# != 0 while test $# != 0
do do
case "$1" in case "$1" in
--continue) --continue)
is_standalone "$@" || usage
get_saved_options
comment_for_reflog continue comment_for_reflog continue
test -d "$DOTEST" || die "No interactive rebase running" test -d "$DOTEST" || die "No interactive rebase running"
@ -402,6 +431,8 @@ do
do_rest do_rest
;; ;;
--abort) --abort)
is_standalone "$@" || usage
get_saved_options
comment_for_reflog abort comment_for_reflog abort
git rerere clear git rerere clear
@ -419,6 +450,8 @@ do
exit exit
;; ;;
--skip) --skip)
is_standalone "$@" || usage
get_saved_options
comment_for_reflog skip comment_for_reflog skip
git rerere clear git rerere clear
@ -426,7 +459,7 @@ do
output git reset --hard && do_rest output git reset --hard && do_rest
;; ;;
-s|--strategy) -s)
case "$#,$1" in case "$#,$1" in
*,*=*) *,*=*)
STRATEGY="-s "$(expr "z$1" : 'z-[^=]*=\(.*\)') ;; STRATEGY="-s "$(expr "z$1" : 'z-[^=]*=\(.*\)') ;;
@ -437,25 +470,26 @@ do
shift ;; shift ;;
esac esac
;; ;;
-m|--merge) -m)
# we use merge anyway # we use merge anyway
;; ;;
-C*) -v)
die "Interactive rebase uses merge, so $1 does not make sense"
;;
-v|--verbose)
VERBOSE=t VERBOSE=t
;; ;;
-p|--preserve-merges) -p)
PRESERVE_MERGES=t PRESERVE_MERGES=t
;; ;;
-i|--interactive) -i)
# yeah, we know # yeah, we know
;; ;;
''|-h) --onto)
usage shift
ONTO=$(git rev-parse --verify "$1") ||
die "Does not point to a valid commit: $1"
;; ;;
*) --)
shift
test $# -eq 1 -o $# -eq 2 || usage
test -d "$DOTEST" && test -d "$DOTEST" &&
die "Interactive rebase already started" die "Interactive rebase already started"
@ -464,15 +498,6 @@ do
comment_for_reflog start comment_for_reflog start
ONTO=
case "$1" in
--onto)
ONTO=$(git rev-parse --verify "$2") ||
die "Does not point to a valid commit: $2"
shift; shift
;;
esac
require_clean_work_tree require_clean_work_tree
UPSTREAM=$(git rev-parse --verify "$1") || die "Invalid base" UPSTREAM=$(git rev-parse --verify "$1") || die "Invalid base"