rebase: fix run_specific_rebase's use of "return" on FreeBSD
authorMatthieu Moy <Matthieu.Moy@imag.fr>
Mon, 9 Sep 2013 08:53:15 +0000 (10:53 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Sep 2013 15:46:16 +0000 (08:46 -0700)
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>
git-rebase.sh
index f8b533d18352c86b16b4507870517b8fe57b26ee..7ab6434a4ff9e95d639bdf7914e50fb327abe8af 100755 (executable)
@@ -143,13 +143,22 @@ move_to_original_branch () {
        esac
 }
 
-run_specific_rebase () {
+run_specific_rebase_internal () {
        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