Merge branch 'km/avoid-non-function-return-in-rebase' into maint

"git rebase" used a POSIX shell construct FreeBSD /bin/sh does not
work well with.

* km/avoid-non-function-return-in-rebase:
  Revert "rebase: fix run_specific_rebase's use of "return" on FreeBSD"
  rebase: avoid non-function use of "return" on FreeBSD
This commit is contained in:
Junio C Hamano 2014-05-08 10:01:06 -07:00
commit e79fcfcd3f
4 changed files with 46 additions and 10 deletions

View file

@ -4,6 +4,17 @@
# Copyright (c) 2010 Junio C Hamano.
#
# The whole contents of this file is run by dot-sourcing it from
# inside a shell function. It used to be that "return"s we see
# below were not inside any function, and expected to return
# to the function that dot-sourced us.
#
# However, FreeBSD /bin/sh misbehaves on such a construct and
# continues to run the statements that follow such a "return".
# As a work-around, we introduce an extra layer of a function
# here, and immediately call it after defining it.
git_rebase__am () {
case "$action" in
continue)
git am --resolved --resolvemsg="$resolvemsg" &&
@ -73,3 +84,7 @@ then
fi
move_to_original_branch
}
# ... and then we call the whole thing.
git_rebase__am

View file

@ -810,6 +810,17 @@ add_exec_commands () {
mv "$1.new" "$1"
}
# The whole contents of this file is run by dot-sourcing it from
# inside a shell function. It used to be that "return"s we see
# below were not inside any function, and expected to return
# to the function that dot-sourced us.
#
# However, FreeBSD /bin/sh misbehaves on such a construct and
# continues to run the statements that follow such a "return".
# As a work-around, we introduce an extra layer of a function
# here, and immediately call it after defining it.
git_rebase__interactive () {
case "$action" in
continue)
# do we have anything to commit?
@ -1042,3 +1053,7 @@ GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
output git checkout $onto || die_abort "could not detach HEAD"
git update-ref ORIG_HEAD $orig_head
do_rest
}
# ... and then we call the whole thing.
git_rebase__interactive

View file

@ -101,6 +101,17 @@ finish_rb_merge () {
say All done.
}
# The whole contents of this file is run by dot-sourcing it from
# inside a shell function. It used to be that "return"s we see
# below were not inside any function, and expected to return
# to the function that dot-sourced us.
#
# However, FreeBSD /bin/sh misbehaves on such a construct and
# continues to run the statements that follow such a "return".
# As a work-around, we introduce an extra layer of a function
# here, and immediately call it after defining it.
git_rebase__merge () {
case "$action" in
continue)
read_state
@ -151,3 +162,7 @@ do
done
finish_rb_merge
}
# ... and then we call the whole thing.
git_rebase__merge

View file

@ -169,22 +169,13 @@ You can run "git stash pop" or "git stash drop" at any time.
rm -rf "$state_dir"
}
run_specific_rebase_internal () {
run_specific_rebase () {
if [ "$interactive_rebase" = implied ]; then
GIT_EDITOR=:
export GIT_EDITOR
autosquash=
fi
# On FreeBSD, the shell's "return" returns from the current
# function, not from the current file inclusion.
# run_specific_rebase_internal has the file inclusion as a
# last statement, so POSIX and FreeBSD's return will do the
# same thing.
. git-rebase--$type
}
run_specific_rebase () {
run_specific_rebase_internal
ret=$?
if test $ret -eq 0
then