[arch-dev-public] [PATCH] Move the extravars work to the PKGBUILD parser
Dan McGee
dan at archlinux.org
Tue Mar 15 04:03:32 EDT 2011
Add an additional fake package variable '%SETVARS%' that shows the
currently defined variables when processing a PKGBUILD. Use this list in
the extravars rule instead of broke-ass regex parsing that will never
catch every possible corner case.
Also update the tests accordingly. Variables defined inside a function
are nothing we are going to worry about at the moment, so safely ignore
them. Add a legal variable to ensure we don't have any false positives,
and fix our own misgivings in the PKGBUILD parser so we aren't polluting
the namespace.
Signed-off-by: Dan McGee <dan at archlinux.org>
---
Slightly touched-up resend; trying to get the unit tests passing would be a good idea.
Namcap/rules/extravars.py | 11 ++++-------
Namcap/tests/pkgbuild/test_extravars.py | 7 ++-----
parsepkgbuild | 1 -
parsepkgbuild.sh | 21 ++++++++++-----------
4 files changed, 16 insertions(+), 24 deletions(-)
diff --git a/Namcap/rules/extravars.py b/Namcap/rules/extravars.py
index 01031f5..0fcdb53 100644
--- a/Namcap/rules/extravars.py
+++ b/Namcap/rules/extravars.py
@@ -31,12 +31,9 @@ class package(PkgbuildRule):
'pkgbase', 'pkgver', 'pkgrel', 'pkgdesc', 'groups',
'url', 'install', 'changelog',
'options', 'optdepends']
- for i in pkginfo.pkgbuild:
- m = re.match('[\s]*([a-z][^\s=]*[^+])=', i)
- if m:
- varname = m.group(1)
- if varname not in stdvars:
- if not varname.startswith('_'):
- self.warnings.append(("extra-var-begins-without-underscore %s", varname))
+ for varname in pkginfo["setvars"]:
+ if varname.islower() and varname not in stdvars \
+ and not varname.startswith('_'):
+ self.warnings.append(("extra-var-begins-without-underscore %s", varname))
# vim: set ts=4 sw=4 noet:
diff --git a/Namcap/tests/pkgbuild/test_extravars.py b/Namcap/tests/pkgbuild/test_extravars.py
index 8913d87..651ec5a 100644
--- a/Namcap/tests/pkgbuild/test_extravars.py
+++ b/Namcap/tests/pkgbuild/test_extravars.py
@@ -42,6 +42,7 @@ source=(ftp://ftp.example.com/pub/mypackage-0.1.tar.gz)
md5sums=('abcdefabcdef12345678901234567890')
mycustomvar="something"
+_legalvar="something else"
build() {
cd "${srcdir}"/${pkgname}-${pkgver}
@@ -106,7 +107,6 @@ package() {
self.assertEqual(r.errors, [])
self.assertEqual(set(r.warnings), set([
("extra-var-begins-without-underscore %s", "mycustomvar"),
- ("extra-var-begins-without-underscore %s", "hello")
]))
self.assertEqual(r.infos, [])
@@ -114,10 +114,7 @@ package() {
"a tricky PKGBUILD with custom variables without underscore"
r = self.run_on_pkg(self.pkgbuild2)
self.assertEqual(r.errors, [])
- self.assertEqual(set(r.warnings), set([
- ("extra-var-begins-without-underscore %s", "mycustomvar"),
- ("extra-var-begins-without-underscore %s", "hello")
- ]))
+ self.assertEqual(r.warnings, [])
self.assertEqual(r.infos, [])
diff --git a/parsepkgbuild b/parsepkgbuild
index 8f0f67d..04e71fd 100755
--- a/parsepkgbuild
+++ b/parsepkgbuild
@@ -9,4 +9,3 @@ export PATH=/tmp/parsepkgbuild
PARSE_PKGBUILD_PATH=${PARSE_PKGBUILD_PATH:-/usr/share/namcap}
exec /bin/bash --noprofile --norc -r "$PARSE_PKGBUILD_PATH"/parsepkgbuild.sh $1
-
diff --git a/parsepkgbuild.sh b/parsepkgbuild.sh
index d601579..4df298b 100644
--- a/parsepkgbuild.sh
+++ b/parsepkgbuild.sh
@@ -124,31 +124,31 @@ if [ -n "$install" ]; then
echo -e "%INSTALL%\n$install\n"
fi
+unset i
+echo "%SETVARS%"
+compgen -A variable
}
# is it a split pkgbuild ?
if [ -n "${pkgbase}" ]; then
- pkgnames=(${pkgname[@]})
+ _namcap_pkgnames=(${pkgname[@]})
unset pkgname
echo -e "%SPLIT%\n1\n"
echo -e "%BASE%\n${pkgbase}\n"
echo "%NAMES%"
- for i in ${pkgnames[@]}; do echo $i; done
+ for i in ${_namcap_pkgnames[@]}; do echo $i; done
echo ""
pkginfo
-fi
-
-# print per package information
-if [ -n "${pkgbase}" ]; then
- for subpkg in ${pkgnames[@]}
+ # print per package information
+ for _namcap_subpkg in ${_namcap_pkgnames[@]}
do
echo -e '\0'
- pkgname=$subpkg
- package_$subpkg
+ pkgname=$_namcap_subpkg
+ package_$_namcap_subpkg
pkginfo
# did the function actually exist?
echo "%PKGFUNCTION%"
- type -t package_$subpkg || echo undefined
+ type -t package_$_namcap_subpkg || echo undefined
echo ""
done
else
@@ -156,4 +156,3 @@ else
fi
# vim: set noet ts=4 sw=4:
-
--
1.7.4.1
More information about the arch-dev-public
mailing list