rebase: factor out reference parsing

Remove the parsing and validation of references (onto, upstream, branch)
from git-rebase--interactive.sh and rely on the information exported from
git-rebase.sh.

By using the parsing of the --onto parameter in git-rebase.sh, this
improves the error message when the parameter is invalid.

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Martin von Zweigbergk 2011-02-06 13:43:42 -05:00 коммит произвёл Junio C Hamano
Родитель 8f9bfb64c5
Коммит 71786f54c4
2 изменённых файлов: 9 добавлений и 48 удалений

Просмотреть файл

@ -682,25 +682,6 @@ rearrange_squash () {
rm -f "$1.sq" "$1.rearranged" rm -f "$1.sq" "$1.rearranged"
} }
LF='
'
parse_onto () {
case "$1" in
*...*)
if left=${1%...*} right=${1#*...} &&
onto=$(git merge-base --all ${left:-HEAD} ${right:-HEAD})
then
case "$onto" in
?*"$LF"?* | '')
exit 1 ;;
esac
echo "$onto"
exit 0
fi
esac
git rev-parse --verify "$1^0"
}
case "$action" in case "$action" in
continue) continue)
get_saved_options get_saved_options
@ -769,47 +750,26 @@ skip)
;; ;;
esac esac
if test -n "$onto"
then
onto=$(parse_onto "$onto") || die "Does not point to a valid commit: $1"
fi
test -z "$rebase_root" -a $# -ge 1 -a $# -le 2 ||
test ! -z "$rebase_root" -a $# -le 1 || usage
git var GIT_COMMITTER_IDENT >/dev/null || git var GIT_COMMITTER_IDENT >/dev/null ||
die "You need to set your committer info first" die "You need to set your committer info first"
if test -z "$rebase_root"
then
upstream_arg="$1"
upstream=$(git rev-parse --verify "$1") || die "Invalid base"
test -z "$onto" && onto=$upstream
shift
else
upstream=
upstream_arg=--root
test -z "$onto" &&
die "You must specify --onto when using --root"
fi
require_clean_work_tree "rebase" "Please commit or stash them." require_clean_work_tree "rebase" "Please commit or stash them."
run_pre_rebase_hook "$upstream_arg" "$@" run_pre_rebase_hook "$upstream_arg" "$@"
comment_for_reflog start comment_for_reflog start
if test ! -z "$1" if test ! -z "$switch_to"
then then
output git checkout "$1" -- || output git checkout "$switch_to" -- ||
die "Could not checkout $1" die "Could not checkout $switch_to"
fi fi
head=$(git rev-parse --verify HEAD) || die "No HEAD?" head=$(git rev-parse --verify HEAD) || die "No HEAD?"
mkdir "$dotest" || die "Could not create temporary $dotest" mkdir "$dotest" || die "Could not create temporary $dotest"
: > "$dotest"/interactive || die "Could not mark as interactive" : > "$dotest"/interactive || die "Could not mark as interactive"
git symbolic-ref HEAD > "$dotest"/head-name 2> /dev/null || echo "$head_name" > "$dotest"/head-name
echo "detached HEAD" > "$dotest"/head-name
echo $head > "$dotest"/head echo $head > "$dotest"/head
case "$rebase_root" in case "$rebase_root" in

Просмотреть файл

@ -431,8 +431,6 @@ else
state_dir="$apply_dir" state_dir="$apply_dir"
fi fi
test "$type" = interactive && run_interactive_rebase "$@"
if test -z "$rebase_root" if test -z "$rebase_root"
then then
# The upstream head must be given. Make sure it is valid. # The upstream head must be given. Make sure it is valid.
@ -443,7 +441,7 @@ then
unset root_flag unset root_flag
upstream_arg="$upstream_name" upstream_arg="$upstream_name"
else else
test -z "$onto" && die "--root must be used with --onto" test -z "$onto" && die "You must specify --onto when using --root"
unset upstream_name unset upstream_name
unset upstream unset upstream
root_flag="--root" root_flag="--root"
@ -470,7 +468,8 @@ case "$onto_name" in
fi fi
;; ;;
*) *)
onto=$(git rev-parse --verify "${onto_name}^0") || exit onto=$(git rev-parse --verify "${onto_name}^0") ||
die "Does not point to a valid commit: $1"
;; ;;
esac esac
@ -512,6 +511,8 @@ case "$#" in
esac esac
orig_head=$branch orig_head=$branch
test "$type" = interactive && run_interactive_rebase "$@"
require_clean_work_tree "rebase" "Please commit or stash them." require_clean_work_tree "rebase" "Please commit or stash them."
# Now we are rebasing commits $upstream..$branch (or with --root, # Now we are rebasing commits $upstream..$branch (or with --root,