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 6B00D13824A for ; Sun, 8 May 2016 21:21:27 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 0ECF621C0EF; Sun, 8 May 2016 21:21:21 +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 9460321C0EE for ; Sun, 8 May 2016 21:21: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 A106E340BBE for ; Sun, 8 May 2016 21:21:18 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 2C1CD967 for ; Sun, 8 May 2016 21:21:15 +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: <1462742322.0cd414979f4b5531fdd158b3c4766c436bd057eb.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: 0cd414979f4b5531fdd158b3c4766c436bd057eb X-VCS-Branch: repoman Date: Sun, 8 May 2016 21:21:15 +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: 90b97453-0d46-4b68-8852-972e6e658050 X-Archives-Hash: 0bdec9fbb77f0da3636a7840f65ac22e commit: 0cd414979f4b5531fdd158b3c4766c436bd057eb Author: Brian Dolbec gentoo org> AuthorDate: Tue May 3 20:54:33 2016 +0000 Commit: Brian Dolbec gentoo org> CommitDate: Sun May 8 21:18:42 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=0cd41497 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 7117e7d..83ca93f 100644 --- a/pym/repoman/modules/scan/metadata/pkgmetadata.py +++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py @@ -130,8 +130,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 @@ -151,15 +150,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 @@ -182,7 +174,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 @@ -192,7 +184,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: @@ -203,37 +195,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):