rebase: fix run_specific_rebase's use of "return" on FreeBSD

Since a1549e10, git-rebase--am.sh uses the shell's "return" statement, to mean "return from the current file inclusion", which is POSIXly correct, but badly interpreted on FreeBSD, which returns from the current function, hence skips the finish_rebase statement that follows the file inclusion. Make the use of "return" portable by using the file inclusion as the last statement of a function. Reported-by: Christoph Mallon <christoph.mallon@gmx.de> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Matthieu Moy committed Sep 9, 2013 at 10:53 UTC 99855ddf4bd319cd06a0524e755ab1c1b7d39f3b
1 file changed +10 -1
git-rebase.sh
+10 -1
@@ -143,13 +143,22 @@ move_to_original_branch () {
143 esac
144 }
145
146 -run_specific_rebase () {
146 +run_specific_rebase_internal () {
147 if [ "$interactive_rebase" = implied ]; then
148 GIT_EDITOR=:
149 export GIT_EDITOR
150 autosquash=
151 fi
152 + # On FreeBSD, the shell's "return" returns from the current
153 + # function, not from the current file inclusion.
154 + # run_specific_rebase_internal has the file inclusion as a
155 + # last statement, so POSIX and FreeBSD's return will do the
156 + # same thing.
157 . git-rebase--$type
158 +}
159 +
160 +run_specific_rebase () {
161 + run_specific_rebase_internal
162 ret=$?
163 if test $ret -eq 0
164 then