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:
parent
5352a82bab
commit
7970aaf0fb
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user