summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2012-01-26 10:28:31 -0500
committerDan McGee <dan@archlinux.org>2012-04-08 21:52:16 -0500
commitdca10b062f27a67dd2daafbe73641b1b7279408e (patch)
treeed232321d05b20415bf3ad8b2f8bcb812135a6eb
parent3a82885348d90a4b11184559a577359c2930b212 (diff)
downloadpacman-dca10b062f27a67dd2daafbe73641b1b7279408e.tar.xz
makepkg: restrict usage of errexit to user functions
It's expected that this will lead to unwanted behavior, and needs widespread testing. It's desirable to commit this for a few reasons: - there's no reason we can't do our own error checking for code that we write. - it avoids the need for ||true hacks scattered about in the code. - it makes us immune to upstream changes in exit codes (FS#28248) Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rw-r--r--scripts/makepkg.sh.in46
1 files changed, 23 insertions, 23 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 1fa4819a..ec5f1ee1 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1,4 +1,4 @@
-#!/bin/bash -e
+#!/bin/bash
#
# makepkg - make packages compatible for use with pacman
# @configure_input@
@@ -437,13 +437,10 @@ run_pacman() {
check_deps() {
(( $# > 0 )) || return 0
- # Disable error trap in pacman subshell call as this breaks bash-3.2 compatibility
- # Also, a non-zero return value is not unexpected and we are manually dealing them
- set +E
local ret=0
local pmout
- pmout=$(run_pacman -T "$@") || ret=$?
- set -E
+ pmout=$(run_pacman -T "$@")
+ ret=$?
if (( ret == 127 )); then #unresolved deps
printf "%s\n" "$pmout"
@@ -476,13 +473,7 @@ handle_deps() {
fi
# we might need the new system environment
- # avoid triggering the ERR trap and exiting
- set +e
- local restoretrap=$(trap -p ERR)
- trap - ERR
source /etc/profile &>/dev/null
- eval $restoretrap
- set -e
return $R_DEPS_SATISFIED
}
@@ -882,6 +873,23 @@ cd_safe() {
fi
}
+run_function_safe() {
+ local restoretrap
+
+ set -e
+ set -E
+
+ restoretrap=$(trap -p ERR)
+ trap 'error_function $pkgfunc' ERR
+
+ run_function "$1"
+
+ eval $restoretrap
+
+ set +E
+ set +e
+}
+
run_function() {
if [[ -z $1 ]]; then
return 1
@@ -907,7 +915,6 @@ run_function() {
local shellopts=$(shopt -p)
local ret=0
- local restoretrap
if (( LOGGING )); then
local fullver=$(get_full_version)
local BUILDLOG="${startdir}/${pkgbase}-${fullver}-${CARCH}-$pkgfunc.log"
@@ -929,18 +936,12 @@ run_function() {
tee "$BUILDLOG" < "$logpipe" &
local teepid=$!
- restoretrap=$(trap -p ERR)
- trap 'error_function $pkgfunc' ERR
$pkgfunc &>"$logpipe"
- eval $restoretrap
wait $teepid
rm "$logpipe"
else
- restoretrap=$(trap -p ERR)
- trap 'error_function $pkgfunc' ERR
$pkgfunc 2>&1
- eval $restoretrap
fi
# reset our shell options
eval "$shellopts"
@@ -958,11 +959,11 @@ run_build() {
[[ -d /usr/lib/ccache/bin ]] && export PATH="/usr/lib/ccache/bin:$PATH"
fi
- run_function "build"
+ run_function_safe "build"
}
run_check() {
- run_function "check"
+ run_function_safe "check"
}
run_package() {
@@ -973,7 +974,7 @@ run_package() {
pkgfunc="package_$1"
fi
- run_function "$pkgfunc"
+ run_function_safe "$pkgfunc"
}
tidy_install() {
@@ -2009,7 +2010,6 @@ for signal in TERM HUP QUIT; do
done
trap 'trap_exit INT "$(gettext "Aborted by user! Exiting...")"' INT
trap 'trap_exit USR1 "$(gettext "An unknown error has occurred. Exiting...")"' ERR
-set -E
# preserve environment variables and canonicalize path
[[ -n ${PKGDEST} ]] && _PKGDEST=$(canonicalize_path ${PKGDEST})