From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 64DA8138224 for ; Tue, 3 May 2016 20:58:20 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id C49CE21C093; Tue, 3 May 2016 20:58:19 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 2958521C093 for ; Tue, 3 May 2016 20:58:19 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 192EC340924 for ; Tue, 3 May 2016 20:58:18 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id A814433F for ; Tue, 3 May 2016 20:58:14 +0000 (UTC) From: "Brian Dolbec" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Brian Dolbec" Message-ID: <1462308873.bf7dc3159db2c15ff7aa61c2c72b143bbd420be0.dolsen@gentoo> Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/ X-VCS-Repository: proj/portage X-VCS-Files: pym/repoman/modules/scan/metadata/pkgmetadata.py X-VCS-Directories: pym/repoman/modules/scan/metadata/ X-VCS-Committer: dolsen X-VCS-Committer-Name: Brian Dolbec X-VCS-Revision: bf7dc3159db2c15ff7aa61c2c72b143bbd420be0 X-VCS-Branch: repoman Date: Tue, 3 May 2016 20:58:14 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 8813bf47-1142-4225-9d51-8550cf4db723 X-Archives-Hash: 2011a1416ba32ad8b8acf71d03ee88a7 commit: bf7dc3159db2c15ff7aa61c2c72b143bbd420be0 Author: Brian Dolbec gentoo org> AuthorDate: Tue May 3 20:54:33 2016 +0000 Commit: Brian Dolbec gentoo 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):