Skip to content

Commit 0b17b43

Browse files
committed
Merge branch 'km/avoid-non-function-return-in-rebase'
Work around /bin/sh that does not like "return" at the top-level of a file that is dot-sourced from inside a function definition. * 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
2 parents 0e6e1a5 + 8cd6596 commit 0b17b43

File tree

4 files changed

+46
-10
lines changed

4 files changed

+46
-10
lines changed

git-rebase--am.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@
44
# Copyright (c) 2010 Junio C Hamano.
55
#
66

7+
# The whole contents of this file is run by dot-sourcing it from
8+
# inside a shell function. It used to be that "return"s we see
9+
# below were not inside any function, and expected to return
10+
# to the function that dot-sourced us.
11+
#
12+
# However, FreeBSD /bin/sh misbehaves on such a construct and
13+
# continues to run the statements that follow such a "return".
14+
# As a work-around, we introduce an extra layer of a function
15+
# here, and immediately call it after defining it.
16+
git_rebase__am () {
17+
718
case "$action" in
819
continue)
920
git am --resolved --resolvemsg="$resolvemsg" \
@@ -75,3 +86,7 @@ then
7586
fi
7687

7788
move_to_original_branch
89+
90+
}
91+
# ... and then we call the whole thing.
92+
git_rebase__am

git-rebase--interactive.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,17 @@ add_exec_commands () {
820820
mv "$1.new" "$1"
821821
}
822822

823+
# The whole contents of this file is run by dot-sourcing it from
824+
# inside a shell function. It used to be that "return"s we see
825+
# below were not inside any function, and expected to return
826+
# to the function that dot-sourced us.
827+
#
828+
# However, FreeBSD /bin/sh misbehaves on such a construct and
829+
# continues to run the statements that follow such a "return".
830+
# As a work-around, we introduce an extra layer of a function
831+
# here, and immediately call it after defining it.
832+
git_rebase__interactive () {
833+
823834
case "$action" in
824835
continue)
825836
# do we have anything to commit?
@@ -1055,3 +1066,7 @@ GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name"
10551066
output git checkout $onto || die_abort "could not detach HEAD"
10561067
git update-ref ORIG_HEAD $orig_head
10571068
do_rest
1069+
1070+
}
1071+
# ... and then we call the whole thing.
1072+
git_rebase__interactive

git-rebase--merge.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,17 @@ finish_rb_merge () {
101101
say All done.
102102
}
103103

104+
# The whole contents of this file is run by dot-sourcing it from
105+
# inside a shell function. It used to be that "return"s we see
106+
# below were not inside any function, and expected to return
107+
# to the function that dot-sourced us.
108+
#
109+
# However, FreeBSD /bin/sh misbehaves on such a construct and
110+
# continues to run the statements that follow such a "return".
111+
# As a work-around, we introduce an extra layer of a function
112+
# here, and immediately call it after defining it.
113+
git_rebase__merge () {
114+
104115
case "$action" in
105116
continue)
106117
read_state
@@ -151,3 +162,7 @@ do
151162
done
152163

153164
finish_rb_merge
165+
166+
}
167+
# ... and then we call the whole thing.
168+
git_rebase__merge

git-rebase.sh

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,22 +175,13 @@ You can run "git stash pop" or "git stash drop" at any time.
175175
rm -rf "$state_dir"
176176
}
177177

178-
run_specific_rebase_internal () {
178+
run_specific_rebase () {
179179
if [ "$interactive_rebase" = implied ]; then
180180
GIT_EDITOR=:
181181
export GIT_EDITOR
182182
autosquash=
183183
fi
184-
# On FreeBSD, the shell's "return" returns from the current
185-
# function, not from the current file inclusion.
186-
# run_specific_rebase_internal has the file inclusion as a
187-
# last statement, so POSIX and FreeBSD's return will do the
188-
# same thing.
189184
. git-rebase--$type
190-
}
191-
192-
run_specific_rebase () {
193-
run_specific_rebase_internal
194185
ret=$?
195186
if test $ret -eq 0
196187
then

0 commit comments

Comments
 (0)