зеркало из https://github.com/microsoft/git.git
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:
Родитель
8f9bfb64c5
Коммит
71786f54c4
|
@ -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,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче