[pacman-dev] [PATCH] Fix the implementation of lint_variable.
David Grayson
davidegrayson at gmail.com
Thu Nov 12 08:37:02 UTC 2015
The old implementation had both false negatives and false positives.
Because of the -w option to grep, it didn't detect lines like:
license=bad
Additionally, it did detect irrelevant lines like this:
--with-arch=${_arch}
The latter is a false positive which made it difficult to build valid
packages.
Signed-off-by: David Grayson <davidegrayson at gmail.com>
---
scripts/libmakepkg/lint_pkgbuild/variable.sh.in | 26 ++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
index 1daac26..eee6b54 100644
--- a/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
+++ b/scripts/libmakepkg/lint_pkgbuild/variable.sh.in
@@ -28,6 +28,25 @@ source "$LIBRARY/util/message.sh"
lint_pkgbuild_functions+=('lint_variable')
+lint_var_defined_as_non_array() {
+ if [[ "${!1+x}" == "" ]]; then
+ return 1 # not defined
+ fi
+ if [[ "$(declare -p $1)" == "declare -a "* ]]; then
+ return 1 # defined as an array
+ fi
+ return 0
+}
+
+lint_var_defined_as_array() {
+ if [[ "${!1+x}" == "" ]]; then
+ return 1 # not defined
+ fi
+ if [[ "$(declare -p $1)" == "declare -a "* ]]; then
+ return 0 # defined as an array
+ fi
+ return 1
+}
lint_variable() {
# TODO: refactor - similar arrays are used elsewhere
@@ -39,17 +58,18 @@ lint_variable() {
local i
for i in ${array[@]}; do
- if grep -w -q -e "$i=[^(]" -e "$i+=[^(]" "$BUILDSCRIPT"; then
+ if lint_var_defined_as_non_array $i; then
error "$(gettext "%s should be an array")" "$i"
ret=1
fi
done
+ local a
for a in ${arch[@]}; do
[[ $a == "any" ]] && continue
for i in ${arch_array[@]}; do
- if grep -w -q -e "$i_$a=[^(]" -e "$i_$a+=[^(]" "$BUILDSCRIPT"; then
+ if lint_var_defined_as_non_array $i; then
error "$(gettext "%s_%s should be an array")" "$i" "$a"
ret=1
fi
@@ -57,7 +77,7 @@ lint_variable() {
done
for i in ${string[@]}; do
- if grep -w -q -e "$i=(" -e "$i+=(" "$BUILDSCRIPT"; then
+ if lint_var_defined_as_array $i; then
error "$(gettext "%s should not be an array")" "$i"
ret=1
fi
--
2.6.2
More information about the pacman-dev
mailing list