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>maint
							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 New Issue
	
	 Martin von Zweigbergk
						Martin von Zweigbergk