From: Jeff King Date: Tue, 13 May 2008 08:45:56 GMT Subject: [PATCH 3/4] clone: bsd shell portability fix Message-ID: <20080513084556.GC23799@sigill.intra.peff.net> In-Reply-To: <20080513084338.GA23729@sigill.intra.peff.net> When using /bin/sh from FreeBSD 6.1, the value of $? is lost when calling a function inside the 'trap' action. This resulted in clone erroneously indicating success when it should have reported failure. As a workaround, we save the value of $? before calling any functions. Signed-off-by: Jeff King --- git-clone.sh | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/git-clone.sh b/git-clone.sh index 9d88d1c..547228e 100755 --- a/git-clone.sh +++ b/git-clone.sh @@ -240,7 +240,6 @@ die "working tree '$GIT_WORK_TREE' already exists." D= W= cleanup() { - err=$? test -z "$D" && rm -rf "$dir" test -z "$W" && test -n "$GIT_WORK_TREE" && rm -rf "$GIT_WORK_TREE" cd .. @@ -248,7 +247,7 @@ cleanup() { test -n "$W" && rm -rf "$W" exit $err } -trap cleanup 0 +trap 'err=$?; cleanup' 0 mkdir -p "$dir" && D=$(cd "$dir" && pwd) || usage test -n "$GIT_WORK_TREE" && mkdir -p "$GIT_WORK_TREE" && W=$(cd "$GIT_WORK_TREE" && pwd) && GIT_WORK_TREE="$W" && export GIT_WORK_TREE -- 1.5.5.1.296.gf618c