commit: bf7dc3159db2c15ff7aa61c2c72b143bbd420be0
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue May 3 20:54:33 2016 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Tue May 3 20:54:33 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=bf7dc315
repoman/modules/.../pkgmetadata.py: Have xml validation log all qatracker
errors
Remove the use flag qatracker additions.
Add all logged XMLSchema errors to the qatracker .
This makes it a one run check to add all possible errors via the XMLSchema.
pym/repoman/modules/scan/metadata/pkgmetadata.py | 80 +++++++++++-------------
1 file changed, 36 insertions(+), 44 deletions(-)
diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py
b/pym/repoman/modules/scan/metadata/pkgmetadata.py
index d6d8557..44b5edd 100644
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py
@@ -126,8 +126,7 @@ class PkgMetadata(ScanBase, USEFlagChecks):
(xpkg, metadata_doctype_name,
doctype_name))
# load USE flags from metadata.xml
- self.musedict, metadata_bad = self._parse_metadata_use(
- _metadata_xml, xpkg, metadata_bad)
+ self.musedict = self._parse_metadata_use(_metadata_xml, xpkg)
for atom in chain(*self.musedict.values()):
if atom is None:
continue
@@ -147,15 +146,8 @@ class PkgMetadata(ScanBase, USEFlagChecks):
# Only carry out if in package directory or check forced
if not metadata_bad:
validator = etree.XMLSchema(file=self.metadata_xsd)
- try:
- validator.assertValid(_metadata_xml)
- except etree.DocumentInvalid as error:
- self.qatracker.add_error(
- "metadata.bad",
- xpkg + "/metadata.xml: %s"
- % (str(error))
- )
- del metadata_bad
+ if not validator.validate(_metadata_xml):
+ self._add_validate_errors(xpkg,
validator.error_log)
self.muselist = frozenset(self.musedict)
return False
@@ -178,7 +170,7 @@ class PkgMetadata(ScanBase, USEFlagChecks):
% (xpkg, myflag))
return False
- def _parse_metadata_use(self, xml_tree, xpkg, metadata_bad):
+ def _parse_metadata_use(self, xml_tree, xpkg):
"""
Records are wrapped in XML as per GLEP 56
returns a dict with keys constisting of USE flag names and
values
@@ -188,7 +180,7 @@ class PkgMetadata(ScanBase, USEFlagChecks):
usetags = xml_tree.findall("use")
if not usetags:
- return uselist, metadata_bad
+ return uselist
# It's possible to have multiple 'use' elements.
for usetag in usetags:
@@ -199,37 +191,37 @@ class PkgMetadata(ScanBase, USEFlagChecks):
for flag in flags:
pkg_flag = flag.get("name")
- if pkg_flag is None:
- metadata_bad = True
- self.qatracker.add_error(
- "metadata.bad",
- "%s/metadata.xml: line: %s,
'%s', missing attribute: name"
- % (xpkg, flag.sourceline,
flag.text))
- continue
- flag_restrict = flag.get("restrict")
-
- # emulate the Element.itertext() method from
python-2.7
- inner_text = []
- stack = []
- stack.append(flag)
- while stack:
- obj = stack.pop()
- if isinstance(obj, basestring):
- inner_text.append(obj)
- continue
- if isinstance(obj.text, basestring):
- inner_text.append(obj.text)
- if isinstance(obj.tail, basestring):
- stack.append(obj.tail)
- stack.extend(reversed(obj))
-
- if pkg_flag not in uselist:
- uselist[pkg_flag] = {}
-
- # (flag_restrict can be None)
- uselist[pkg_flag][flag_restrict] = "
".join("".join(inner_text).split())
-
- return uselist, metadata_bad
+ if pkg_flag is not None:
+ flag_restrict = flag.get("restrict")
+
+ # emulate the Element.itertext() method
from python-2.7
+ inner_text = []
+ stack = []
+ stack.append(flag)
+ while stack:
+ obj = stack.pop()
+ if isinstance(obj, basestring):
+ inner_text.append(obj)
+ continue
+ if isinstance(obj.text,
basestring):
+
inner_text.append(obj.text)
+ if isinstance(obj.tail,
basestring):
+ stack.append(obj.tail)
+ stack.extend(reversed(obj))
+
+ if flag.get("name") not in uselist:
+ uselist[flag.get("name")] = {}
+
+ # (flag_restrict can be None)
+
uselist[flag.get("name")][flag_restrict] = " ".join("".join(inner_text).split())
+ return uselist
+
+ def _add_validate_errors(self, xpkg, log):
+ for error in log:
+ self.qatracker.add_error(
+ "metadata.bad",
+ "%s/metadata.xml: line: %s, %s"
+ % (xpkg, error.line, error.message))
@property
def runInPkgs(self):