commit:     b78d61dd3e4281a43523aea1a24e395a2674c3ab
Author:     Dirkjan Ochtman <dirkjan <AT> ochtman <DOT> nl>
AuthorDate: Tue May  3 06:33:47 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=b78d61dd

repoman/modules/.../pkgmetadata.py: Early return on metadata parse errors

 pym/repoman/modules/scan/metadata/pkgmetadata.py | 148 ++++++++++++-----------
 1 file changed, 75 insertions(+), 73 deletions(-)

diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py 
b/pym/repoman/modules/scan/metadata/pkgmetadata.py
index 3c1c2d0..3b48b8e 100644
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py
@@ -102,89 +102,91 @@ class PkgMetadata(ScanBase, USEFlagChecks):
                        metadata_bad = True
                        self.qatracker.add_error("metadata.bad", 
"%s/metadata.xml: %s" % (xpkg, e))
                        del e
+                       self.muselist = frozenset(self.musedict)
+                       return False
+
+               if not hasattr(xml_parser, 'parser') or \
+                       sys.hexversion < 0x2070000 or \
+                       (sys.hexversion > 0x3000000 and sys.hexversion < 
0x3020000):
+                       # doctype is not parsed with python 2.6 or 3.1
+                       pass
                else:
-                       if not hasattr(xml_parser, 'parser') or \
-                               sys.hexversion < 0x2070000 or \
-                               (sys.hexversion > 0x3000000 and sys.hexversion 
< 0x3020000):
-                               # doctype is not parsed with python 2.6 or 3.1
-                               pass
+                       if "XML_DECLARATION" not in xml_info:
+                               self.qatracker.add_error(
+                                       "metadata.bad", "%s/metadata.xml: "
+                                       "xml declaration is missing on first 
line, "
+                                       "should be '%s'" % (xpkg, 
metadata_xml_declaration))
                        else:
-                               if "XML_DECLARATION" not in xml_info:
+                               xml_version, xml_encoding, xml_standalone = \
+                                       xml_info["XML_DECLARATION"]
+                               if xml_encoding is None or \
+                                       xml_encoding.upper() != 
metadata_xml_encoding:
+                                       if xml_encoding is None:
+                                               encoding_problem = "but it is 
undefined"
+                                       else:
+                                               encoding_problem = "not '%s'" % 
xml_encoding
                                        self.qatracker.add_error(
                                                "metadata.bad", 
"%s/metadata.xml: "
-                                               "xml declaration is missing on 
first line, "
-                                               "should be '%s'" % (xpkg, 
metadata_xml_declaration))
-                               else:
-                                       xml_version, xml_encoding, 
xml_standalone = \
-                                               xml_info["XML_DECLARATION"]
-                                       if xml_encoding is None or \
-                                               xml_encoding.upper() != 
metadata_xml_encoding:
-                                               if xml_encoding is None:
-                                                       encoding_problem = "but 
it is undefined"
-                                               else:
-                                                       encoding_problem = "not 
'%s'" % xml_encoding
-                                               self.qatracker.add_error(
-                                                       "metadata.bad", 
"%s/metadata.xml: "
-                                                       "xml declaration 
encoding should be '%s', %s" %
-                                                       (xpkg, 
metadata_xml_encoding, encoding_problem))
+                                               "xml declaration encoding 
should be '%s', %s" %
+                                               (xpkg, metadata_xml_encoding, 
encoding_problem))
 
-                               if "DOCTYPE" not in xml_info:
-                                       metadata_bad = True
-                                       self.qatracker.add_error(
-                                               "metadata.bad",
-                                               "%s/metadata.xml: %s" % (xpkg, 
"DOCTYPE is missing"))
-                               else:
-                                       doctype_name, doctype_system, 
doctype_pubid = \
-                                               xml_info["DOCTYPE"]
-                                       if doctype_system != metadata_dtd_uri:
-                                               if doctype_system is None:
-                                                       system_problem = "but 
it is undefined"
-                                               else:
-                                                       system_problem = "not 
'%s'" % doctype_system
-                                               self.qatracker.add_error(
-                                                       "metadata.bad", 
"%s/metadata.xml: "
-                                                       "DOCTYPE: SYSTEM should 
refer to '%s', %s" %
-                                                       (xpkg, 
metadata_dtd_uri, system_problem))
-
-                                       if doctype_name != 
metadata_doctype_name:
-                                               self.qatracker.add_error(
-                                                       "metadata.bad", 
"%s/metadata.xml: "
-                                                       "DOCTYPE: name should 
be '%s', not '%s'" %
-                                                       (xpkg, 
metadata_doctype_name, doctype_name))
-
-                       # load USE flags from metadata.xml
-                       try:
-                               self.musedict = 
parse_metadata_use(_metadata_xml)
-                       except portage.exception.ParseError as e:
+                       if "DOCTYPE" not in xml_info:
                                metadata_bad = True
                                self.qatracker.add_error(
-                                       "metadata.bad", "%s/metadata.xml: %s" % 
(xpkg, e))
+                                       "metadata.bad",
+                                       "%s/metadata.xml: %s" % (xpkg, "DOCTYPE 
is missing"))
                        else:
-                               for atom in chain(*self.musedict.values()):
-                                       if atom is None:
-                                               continue
-                                       try:
-                                               atom = Atom(atom)
-                                       except InvalidAtom as e:
+                               doctype_name, doctype_system, doctype_pubid = \
+                                       xml_info["DOCTYPE"]
+                               if doctype_system != metadata_dtd_uri:
+                                       if doctype_system is None:
+                                               system_problem = "but it is 
undefined"
+                                       else:
+                                               system_problem = "not '%s'" % 
doctype_system
+                                       self.qatracker.add_error(
+                                               "metadata.bad", 
"%s/metadata.xml: "
+                                               "DOCTYPE: SYSTEM should refer 
to '%s', %s" %
+                                               (xpkg, metadata_dtd_uri, 
system_problem))
+
+                               if doctype_name != metadata_doctype_name:
+                                       self.qatracker.add_error(
+                                               "metadata.bad", 
"%s/metadata.xml: "
+                                               "DOCTYPE: name should be '%s', 
not '%s'" %
+                                               (xpkg, metadata_doctype_name, 
doctype_name))
+
+               # load USE flags from metadata.xml
+               try:
+                       self.musedict = parse_metadata_use(_metadata_xml)
+               except portage.exception.ParseError as e:
+                       metadata_bad = True
+                       self.qatracker.add_error(
+                               "metadata.bad", "%s/metadata.xml: %s" % (xpkg, 
e))
+               else:
+                       for atom in chain(*self.musedict.values()):
+                               if atom is None:
+                                       continue
+                               try:
+                                       atom = Atom(atom)
+                               except InvalidAtom as e:
+                                       self.qatracker.add_error(
+                                               "metadata.bad",
+                                               "%s/metadata.xml: Invalid atom: 
%s" % (xpkg, e))
+                               else:
+                                       if atom.cp != xpkg:
                                                self.qatracker.add_error(
                                                        "metadata.bad",
-                                                       "%s/metadata.xml: 
Invalid atom: %s" % (xpkg, e))
-                                       else:
-                                               if atom.cp != xpkg:
-                                                       
self.qatracker.add_error(
-                                                               "metadata.bad",
-                                                               
"%s/metadata.xml: Atom contains "
-                                                               "unexpected 
cat/pn: %s" % (xpkg, atom))
-
-                       # Run other metadata.xml checkers
-                       try:
-                               check_metadata(_metadata_xml, get_herd_base(
-                                       self.repoman_settings))
-                       except (UnknownHerdsError, ) as e:
-                               metadata_bad = True
-                               self.qatracker.add_error(
-                                       "metadata.bad", "%s/metadata.xml: %s" % 
(xpkg, e))
-                               del e
+                                                       "%s/metadata.xml: Atom 
contains "
+                                                       "unexpected cat/pn: %s" 
% (xpkg, atom))
+
+               # Run other metadata.xml checkers
+               try:
+                       check_metadata(_metadata_xml, get_herd_base(
+                               self.repoman_settings))
+               except (UnknownHerdsError, ) as e:
+                       metadata_bad = True
+                       self.qatracker.add_error(
+                               "metadata.bad", "%s/metadata.xml: %s" % (xpkg, 
e))
+                       del e
 
                # Only carry out if in package directory or check forced
                if not metadata_bad:

Reply via email to