[arch-projects] [namcap][PATCH] add two rules which check if a PKGBUILD for vcs packages contains the correct makedepends and conflicts array
--- Namcap/rules/__init__.py | 3 ++- Namcap/rules/vcspackages.py | 43 +++++++++++++++++++++++++++++++++++++++++++ namcap-tags | 3 +++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 Namcap/rules/vcspackages.py diff --git a/Namcap/rules/__init__.py b/Namcap/rules/__init__.py index f7780d2..62c2617 100644 --- a/Namcap/rules/__init__.py +++ b/Namcap/rules/__init__.py @@ -60,7 +60,8 @@ from . import ( pkginfo, pkgnameindesc, sfurl, - splitpkgbuild + splitpkgbuild, + vcspackages ) all_rules = {} diff --git a/Namcap/rules/vcspackages.py b/Namcap/rules/vcspackages.py new file mode 100644 index 0000000..041ddf9 --- /dev/null +++ b/Namcap/rules/vcspackages.py @@ -0,0 +1,43 @@ +# +# namcap rules - vcspackages +# Copyright (C) 2013 Jelle van der Waa <jelle@vdwaa.nl> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +from Namcap.ruleclass import * + +vcspackages = {'-git': 'git', '-svn': 'subversion', '-bzr': 'bzr', '-hg': 'mercurial' } + +class ConflictsRule(PkgbuildRule): + name = "conflictsrule" + description = "Verifies if a pkgname-vcs package conflicts with pkgname" + def analyze(self, pkginfo, tar): + if 'name' in pkginfo: + if any(pkginfo["name"].endswith(vcs) for vcs in vcspackages) and not "conflicts" in pkginfo: + self.warnings.append(("vcs-package-conflicts", ())) + +class MakedependsRule(PkgbuildRule): + name = "makedependsrule" + description = "Checks if a vcs package has the correct makedepends array" + def analyze(self, pkginfo, tar): + if 'name' in pkginfo: + for vcsname, vcspkg in vcspackages.items(): + if not pkginfo['name'].endswith(vcsname): + continue + if 'makedepends' not in pkginfo or vcspkg not in pkginfo['makedepends']: + self.errors.append(("vcs-package-makedepends-missing %s", vcspkg)) + +# vim: set ts=4 sw=4 noet: diff --git a/namcap-tags b/namcap-tags index 818c7a5..ecde1c0 100644 --- a/namcap-tags +++ b/namcap-tags @@ -77,6 +77,9 @@ use-pkgdir :: Use $pkgdir instead of $startdir/pkg use-srcdir :: Use $srcdir instead of $startdir/src using-dl-sourceforge :: Attempting to use dl sourceforge domain, use downloads.sourceforge.net instead variable-not-array %s :: Variable %s is not an array. +vcs-package-conflicts :: Vcs package should conflict with the non-vcs version +vcs-package-makedepends-missing %s :: Makedepends array should contain '%s' + # dependency tags dependency-already-satisfied %s :: Dependency %s included but already satisfied -- 1.8.4
2013/9/8 Jelle van der Waa <jelle@vdwaa.nl>:
+ def analyze(self, pkginfo, tar): + if 'name' in pkginfo: + if any(pkginfo["name"].endswith(vcs) for vcs in vcspackages) and not "conflicts" in pkginfo: + self.warnings.append(("vcs-package-conflicts", ())) +
Python trick: you can write if pkginfo["name"].endswith(tuple(vcspackages)) and "conflicts" not in pkginfo: ... -- Rémy.
Adds a unit test --- Namcap/rules/__init__.py | 3 ++- Namcap/rules/vcspackages.py | 43 +++++++++++++++++++++++++++++++++++++++++++ namcap-tags | 3 +++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 Namcap/rules/vcspackages.py diff --git a/Namcap/rules/__init__.py b/Namcap/rules/__init__.py index f7780d2..62c2617 100644 --- a/Namcap/rules/__init__.py +++ b/Namcap/rules/__init__.py @@ -60,7 +60,8 @@ from . import ( pkginfo, pkgnameindesc, sfurl, - splitpkgbuild + splitpkgbuild, + vcspackages ) all_rules = {} diff --git a/Namcap/rules/vcspackages.py b/Namcap/rules/vcspackages.py new file mode 100644 index 0000000..32bbbbb --- /dev/null +++ b/Namcap/rules/vcspackages.py @@ -0,0 +1,43 @@ +# +# namcap rules - vcspackages +# Copyright (C) 2013 Jelle van der Waa <jelle@vdwaa.nl> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +from Namcap.ruleclass import * + +vcspackages = {'-git': 'git', '-svn': 'subversion', '-bzr': 'bzr', '-hg': 'mercurial' } + +class ConflictsRule(PkgbuildRule): + name = "conflictsrule" + description = "Verifies if a pkgname-vcs package conflicts with pkgname" + def analyze(self, pkginfo, tar): + if 'name' in pkginfo: + if pkginfo["name"].endswith(tuple(vcspackages)) and "conflicts" not in pkginfo: + self.warnings.append(("vcs-package-conflicts", ())) + +class MakedependsRule(PkgbuildRule): + name = "makedependsrule" + description = "Checks if a vcs package has the correct makedepends array" + def analyze(self, pkginfo, tar): + if 'name' in pkginfo: + for vcsname, vcspkg in vcspackages.items(): + if not pkginfo['name'].endswith(vcsname): + continue + if 'makedepends' not in pkginfo or vcspkg not in pkginfo['makedepends']: + self.errors.append(("vcs-package-makedepends-missing %s", vcspkg)) + +# vim: set ts=4 sw=4 noet: diff --git a/namcap-tags b/namcap-tags index 818c7a5..ecde1c0 100644 --- a/namcap-tags +++ b/namcap-tags @@ -77,6 +77,9 @@ use-pkgdir :: Use $pkgdir instead of $startdir/pkg use-srcdir :: Use $srcdir instead of $startdir/src using-dl-sourceforge :: Attempting to use dl sourceforge domain, use downloads.sourceforge.net instead variable-not-array %s :: Variable %s is not an array. +vcs-package-conflicts :: Vcs package should conflict with the non-vcs version +vcs-package-makedepends-missing %s :: Makedepends array should contain '%s' + # dependency tags dependency-already-satisfied %s :: Dependency %s included but already satisfied -- 1.8.4
participants (2)
-
Jelle van der Waa
-
Rémy Oudompheng