[pacman-dev] [PATCH 2/3] makepkg: catch errors sourcing files

Dave Reisner d at falconindy.com
Tue Feb 14 13:57:59 EST 2012


create source_safe() function which temporarily disables extglob and
exits on error.

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
 scripts/makepkg.sh.in |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 61c95af..c7bde9c 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -858,6 +858,15 @@ error_function() {
 	exit 2 # $E_BUILD_FAILED
 }
 
+source_safe() {
+	shopt -u extglob
+	if ! source "$@"; then
+		error "$(gettext "Failed to source %s")" "$1"
+		exit 1
+	fi
+	shopt -s extglob
+}
+
 run_function_safe() {
 	local restoretrap
 
@@ -1781,7 +1790,7 @@ devel_update() {
 			if [[ -f $BUILDFILE && -w $BUILDFILE ]]; then
 				@SEDINPLACE@ "s/^pkgver=[^ ]*/pkgver=$newpkgver/" "$BUILDFILE"
 				@SEDINPLACE@ "s/^pkgrel=[^ ]*/pkgrel=1/" "$BUILDFILE"
-				source "$BUILDFILE"
+				source_safe "$BUILDFILE"
 			fi
 		fi
 	fi
@@ -1990,7 +1999,7 @@ MAKEPKG_CONF=${MAKEPKG_CONF:-$confdir/makepkg.conf}
 
 # Source the config file; fail if it is not found
 if [[ -r $MAKEPKG_CONF ]]; then
-	source "$MAKEPKG_CONF"
+	source_safe "$MAKEPKG_CONF"
 else
 	error "$(gettext "%s not found.")" "$MAKEPKG_CONF"
 	plain "$(gettext "Aborting...")"
@@ -2000,7 +2009,7 @@ fi
 # Source user-specific makepkg.conf overrides, but only if no override config
 # file was specified
 if [[ $MAKEPKG_CONF = "$confdir/makepkg.conf" && -r ~/.makepkg.conf ]]; then
-	source ~/.makepkg.conf
+	source_safe ~/.makepkg.conf
 fi
 
 # set pacman command if not already defined
@@ -2116,9 +2125,7 @@ if [[ ! -f $BUILDFILE ]]; then
 	else
 		# PKGBUILD passed through a pipe
 		BUILDFILE=/dev/stdin
-		shopt -u extglob
-		source "$BUILDFILE"
-		shopt -s extglob
+		source_safe "$BUILDFILE"
 	fi
 else
 	crlftest=$(file "$BUILDFILE" | grep -F 'CRLF' || true)
@@ -2130,9 +2137,7 @@ else
 	if [[ ${BUILDFILE:0:1} != "/" ]]; then
 		BUILDFILE="$startdir/$BUILDFILE"
 	fi
-	shopt -u extglob
-	source "$BUILDFILE"
-	shopt -s extglob
+	source_safe "$BUILDFILE"
 fi
 
 # set defaults if they weren't specified in buildfile
-- 
1.7.9



More information about the pacman-dev mailing list