Skip to content

Commit

Permalink
Merge branch 'km/avoid-non-function-return-in-rebase' into maint
Browse files Browse the repository at this point in the history
"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
  • Loading branch information
Junio C Hamano committed May 8, 2014
2 parents e230cd8 + 8cd6596 commit e79fcfc
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 10 deletions.
15 changes: 15 additions & 0 deletions git-rebase--am.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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" &&
Expand Down Expand Up @@ -73,3 +84,7 @@ then
fi

move_to_original_branch

}
# ... and then we call the whole thing.
git_rebase__am
15 changes: 15 additions & 0 deletions git-rebase--interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down Expand Up @@ -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
15 changes: 15 additions & 0 deletions git-rebase--merge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -151,3 +162,7 @@ do
done

finish_rb_merge

}
# ... and then we call the whole thing.
git_rebase__merge
11 changes: 1 addition & 10 deletions git-rebase.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit e79fcfc

Please sign in to comment.