From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/ Date: Sat, 14 May 2016 18:33:57 +0000 (UTC) [thread overview] Message-ID: <1463250580.c6d6b003bc0545912f15c82a99c2e948a5c63e60.dolsen@gentoo> (raw) commit: c6d6b003bc0545912f15c82a99c2e948a5c63e60 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: Sat May 14 18:29:40 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c6d6b003 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):
WARNING: multiple messages have this Message-ID (diff)
From: "Brian Dolbec" <dolsen@gentoo.org> To: gentoo-commits@lists.gentoo.org Subject: [gentoo-commits] proj/portage:master commit in: pym/repoman/modules/scan/metadata/ Date: Sun, 15 May 2016 23:51:12 +0000 (UTC) [thread overview] Message-ID: <1463250580.c6d6b003bc0545912f15c82a99c2e948a5c63e60.dolsen@gentoo> (raw) Message-ID: <20160515235112.n_VIg6ptrbnpu9fkB_M4ldOAVQwe5FNmBjORB5JG_fQ@z> (raw) commit: c6d6b003bc0545912f15c82a99c2e948a5c63e60 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: Sat May 14 18:29:40 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=c6d6b003 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):
next reply other threads:[~2016-05-14 18:34 UTC|newest] Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-05-14 18:33 Brian Dolbec [this message] 2016-05-15 23:51 ` [gentoo-commits] proj/portage:master commit in: pym/repoman/modules/scan/metadata/ Brian Dolbec -- strict thread matches above, loose matches on Subject: below -- 2016-05-14 18:33 [gentoo-commits] proj/portage:repoman " Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-14 18:33 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-08 21:21 Brian Dolbec 2016-05-05 16:06 Brian Dolbec 2016-05-05 16:02 Brian Dolbec 2016-05-04 6:24 Brian Dolbec 2016-05-04 6:09 Brian Dolbec 2016-05-04 3:45 Brian Dolbec 2016-05-03 20:58 Brian Dolbec 2016-05-03 20:58 Brian Dolbec 2016-05-03 17:43 Brian Dolbec 2016-05-03 17:43 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-05-03 9:33 Brian Dolbec 2016-04-25 15:32 Brian Dolbec 2016-04-21 16:54 Brian Dolbec 2016-03-15 19:00 Brian Dolbec 2016-01-06 4:21 Brian Dolbec
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1463250580.c6d6b003bc0545912f15c82a99c2e948a5c63e60.dolsen@gentoo \ --to=dolsen@gentoo.org \ --cc=gentoo-commits@lists.gentoo.org \ --cc=gentoo-dev@lists.gentoo.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox