[PATCH 3/3] Make rebase--interactive use OPTIONS_SPEC
Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
---
git-rebase--interactive.sh | 58 ++++++++++++++++++++++++++-----------------
1 files changed, 35 insertions(+), 23 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index e8ac2ae..aeb9628 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -10,10 +10,25 @@
# The original idea comes from Eric W. Biederman, in
# http://article.gmane.org/gmane.comp.version-control.git/22407
-USAGE='(--continue | --abort | --skip | [--preserve-merges] [--first-parent]
- [--preserve-tags] [--verbose] [--onto <branch>] <upstream> [<branch>])'
+OPTIONS_KEEPDASHDASH=
+OPTIONS_SPEC='
+git-rebase -i [options] <upstream> [<branch>]
+git-rebase (--continue | --abort | --skip)
+--
+continue Continue rebasing process
+abort Abort rebasing process and restore original branch
+skip Skip current patch and continue rebasing process
+p,preserve-merges Try to recreate merges instead of ignoring
+t,preserve-tags Update tags to the new commit object
+m,merge Used anyways (no-op)
+i,interactive Used anyways (no-op)
+onto= Rebase onto given branch instead of upstream
+v,verbose Display a diffstat of what changed upstream
+ When preserving merges:
+f,first-parent Show only commits following the first parent of each commit
+s,strategy= Use the given merge strategy
+'
-OPTIONS_SPEC=
. git-sh-setup
require_work_tree
@@ -25,6 +40,7 @@ SQUASH_MSG="$DOTEST"/message-squash
PRESERVE_MERGES=
STRATEGY=
VERBOSE=
+ONTO=
MARK_PREFIX='refs/rebase-marks'
test -f "$DOTEST"/strategy && STRATEGY="$(cat "$DOTEST"/strategy)"
test -f "$DOTEST"/verbose && VERBOSE=t
@@ -584,7 +600,7 @@ do
output git reset --hard && do_rest
;;
- -s|--strategy)
+ -s)
case "$#,$1" in
*,*=*)
STRATEGY="-s "$(expr "z$1" : 'z-[^=]*=\(.*\)') ;;
@@ -595,32 +611,36 @@ do
shift ;;
esac
;;
- -m|--merge)
+ -m)
# we use merge anyway
;;
- -C*)
- die "Interactive rebase uses merge, so $1 does not make sense"
- ;;
- -v|--verbose)
+ -v)
VERBOSE=t
;;
- -p|--preserve-merges)
+ -p)
PRESERVE_MERGES=t
;;
- -f|--first-parent)
+ -f)
FIRST_PARENT=t
PRESERVE_MERGES=t
;;
- -t|--preserve-tags)
+ -t)
PRESERVE_TAGS=t
;;
- -i|--interactive)
+ -i)
# yeah, we know
;;
+ --onto)
+ shift
+ ONTO=$(git rev-parse --verify "$1") ||
+ die "Does not point to a valid commit: $1"
+ ;;
''|-h)
usage
;;
- *)
+ --)
+ shift
+ test $# -eq 1 -o $# -eq 2 || usage
test -d "$DOTEST" &&
die "Interactive rebase already started"
@@ -629,15 +649,6 @@ do
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
UPSTREAM=$(git rev-parse --verify "$1") || die "Invalid base"
@@ -720,6 +731,7 @@ EOF
die_abort "Nothing to do"
output git checkout $ONTO && do_rest
+ exit 0
;;
esac
shift
--
1.5.5.1.561.gd8556