mirror of
https://github.com/git/git
synced 2024-08-28 20:20:07 +00:00
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:
parent
8f9bfb64c5
commit
71786f54c4
|
@ -682,25 +682,6 @@ rearrange_squash () {
|
|||
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
|
||||
continue)
|
||||
get_saved_options
|
||||
|
@ -769,47 +750,26 @@ skip)
|
|||
;;
|
||||
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 ||
|
||||
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."
|
||||
|
||||
run_pre_rebase_hook "$upstream_arg" "$@"
|
||||
|
||||
comment_for_reflog start
|
||||
|
||||
if test ! -z "$1"
|
||||
if test ! -z "$switch_to"
|
||||
then
|
||||
output git checkout "$1" -- ||
|
||||
die "Could not checkout $1"
|
||||
output git checkout "$switch_to" -- ||
|
||||
die "Could not checkout $switch_to"
|
||||
fi
|
||||
|
||||
head=$(git rev-parse --verify HEAD) || die "No HEAD?"
|
||||
mkdir "$dotest" || die "Could not create temporary $dotest"
|
||||
|
||||
: > "$dotest"/interactive || die "Could not mark as interactive"
|
||||
git symbolic-ref HEAD > "$dotest"/head-name 2> /dev/null ||
|
||||
echo "detached HEAD" > "$dotest"/head-name
|
||||
echo "$head_name" > "$dotest"/head-name
|
||||
|
||||
echo $head > "$dotest"/head
|
||||
case "$rebase_root" in
|
||||
|
|
|
@ -431,8 +431,6 @@ else
|
|||
state_dir="$apply_dir"
|
||||
fi
|
||||
|
||||
test "$type" = interactive && run_interactive_rebase "$@"
|
||||
|
||||
if test -z "$rebase_root"
|
||||
then
|
||||
# The upstream head must be given. Make sure it is valid.
|
||||
|
@ -443,7 +441,7 @@ then
|
|||
unset root_flag
|
||||
upstream_arg="$upstream_name"
|
||||
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
|
||||
root_flag="--root"
|
||||
|
@ -470,7 +468,8 @@ case "$onto_name" in
|
|||
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
|
||||
|
||||
|
@ -512,6 +511,8 @@ case "$#" in
|
|||
esac
|
||||
orig_head=$branch
|
||||
|
||||
test "$type" = interactive && run_interactive_rebase "$@"
|
||||
|
||||
require_clean_work_tree "rebase" "Please commit or stash them."
|
||||
|
||||
# Now we are rebasing commits $upstream..$branch (or with --root,
|
||||
|
|
Loading…
Reference in a new issue