[pacman-dev] [PATCH 07/11] makepkg: less code repetition when sanitizing variable contents

Andres P aepd87 at gmail.com
Thu Jun 17 08:44:47 EDT 2010


During check_sanity, use regex and abstract the series of variable checks into
a list.

Signed-off-by: Andres P <aepd87 at gmail.com>
---
 scripts/makepkg.sh.in |   70 +++++++++++++++++++-----------------------------
 1 files changed, 28 insertions(+), 42 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 23e3b36..991ad0f 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -1161,6 +1161,19 @@ install_package() {
 	fi
 }
 
+var_lint() {
+	local pattern="$1"
+	local directive="$2"
+	shift 2
+
+	local i
+	for i; do
+		[[ $i =~ $pattern ]] || continue
+		error "$(gettext "'%s' is an invalid value for %s")" "$i" "$directive"
+		return 1
+	done
+}
+
 check_sanity() {
 	# check for no-no's in the build script
 	local i
@@ -1170,28 +1183,25 @@ check_sanity() {
 			return 1
 		fi
 	done
+	
+	local i
+	for i in 'pkgver' 'pkgrel'; do
+		var_lint '-' $i "${!i}" || return
+	done
 
-	local name
-	for name in "${pkgname[@]}"; do
-		if [[ ${name:0:1} = "-" ]]; then
-			error "$(gettext "%s is not allowed to start with a hyphen.")" "pkgname"
-			return 1
+	var_lint '^-'   pkgname  "${pkgname[@]}"  || return
+	var_lint '^-'   pkgbase  "${pkgbase}"     || return
+	var_lint '[<>]' provides "${provides[@]}" || return
+	var_lint '^/'   backup   "${backup[@]}"   || return
+
+	local optdepend
+	for optdepend in "${optdepends[@]}"; do
+		local pkg=${optdepend%%:*}
+		if [[ ! $pkg =~ ^[[:alnum:]\>\<\=\.\+\_\-]*$ ]]; then
+			error "$(gettext "Invalid syntax for optdepend : '%s'")" "$optdepend"
 		fi
 	done
 
-	if [[ ${pkgbase:0:1} = "-" ]]; then
-		error "$(gettext "%s is not allowed to start with a hyphen.")" "pkgbase"
-		return 1
-	fi
-	if [[ $pkgver != ${pkgver//-/} ]]; then
-		error "$(gettext "%s is not allowed to contain hyphens.")" "pkgver"
-		return 1
-	fi
-	if [[ $pkgrel != ${pkgrel//-/} ]]; then
-		error "$(gettext "%s is not allowed to contain hyphens.")" "pkgrel"
-		return 1
-	fi
-
 	if [[ $arch != 'any' ]]; then
 		if ! in_array $CARCH ${arch[@]}; then
 			if (( ! IGNOREARCH )); then
@@ -1203,30 +1213,6 @@ check_sanity() {
 		fi
 	fi
 
-	local provide
-	for provide in ${provides[@]}; do
-		if [[ $provide != ${provide//</} || $provide != ${provide//>/} ]]; then
-			error "$(gettext "Provides array cannot contain comparison (< or >) operators.")"
-			return 1
-		fi
-	done
-
-	local file
-	for file in "${backup[@]}"; do
-		if [[ ${file:0:1} = "/" ]]; then
-			error "$(gettext "Invalid backup entry : %s")" "$file"
-			return 1
-		fi
-	done
-
-	local optdepend
-	for optdepend in "${optdepends[@]}"; do
-		local pkg=${optdepend%%:*}
-		if [[ ! $pkg =~ ^[[:alnum:]\>\<\=\.\+\_\-]*$ ]]; then
-			error "$(gettext "Invalid syntax for optdepend : '%s'")" "$optdepend"
-		fi
-	done
-
 	local i
 	for i in 'changelog' 'install'; do
 		local filelist=$(sed -n "s/^[[:space:]]*$i=//p" "$BUILDFILE") 
-- 
1.7.1



More information about the pacman-dev mailing list