commit:     7dc0305c383403bb643d8e9cba967064c87aa1c6
Author:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Jun  3 19:20:43 2014 +0000
Commit:     Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
CommitDate: Wed Oct  1 23:45:33 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7dc0305c

Repoman: Refactor PkgMetadata and XmlLint classes for variable data passed in

Move all non-consistent data to be passed in via the check functions.
Initialize XmlLint once in the PkgMetadata class __init__().

---
 pym/repoman/_xml.py                       | 33 ++++++++++++++++++++++---------
 pym/repoman/checks/ebuilds/pkgmetadata.py | 12 +++++------
 2 files changed, 30 insertions(+), 15 deletions(-)

diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
index b97c027..d5b5a5e 100644
--- a/pym/repoman/_xml.py
+++ b/pym/repoman/_xml.py
@@ -14,6 +14,8 @@ from repoman._subprocess import repoman_getstatusoutput
 
 
 class _XMLParser(xml.etree.ElementTree.XMLParser):
+
+
        def __init__(self, data, **kwargs):
                xml.etree.ElementTree.XMLParser.__init__(self, **kwargs)
                self._portage_data = data
@@ -25,11 +27,13 @@ class _XMLParser(xml.etree.ElementTree.XMLParser):
                        self.parser.StartDoctypeDeclHandler = \
                                self._portage_StartDoctypeDeclHandler
 
+
        def _portage_XmlDeclHandler(self, version, encoding, standalone):
                if self._base_XmlDeclHandler is not None:
                        self._base_XmlDeclHandler(version, encoding, standalone)
                self._portage_data["XML_DECLARATION"] = (version, encoding, 
standalone)
 
+
        def _portage_StartDoctypeDeclHandler(
                self, doctypeName, systemId, publicId, has_internal_subset):
                if self._base_StartDoctypeDeclHandler is not None:
@@ -49,33 +53,44 @@ class 
_MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
 
 class XmlLint(object):
 
-       def __init__(self, options, repolevel, repoman_settings):
+       def __init__(self, options, repoman_settings):
                self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"], 
'metadata.dtd')
+               self.options = options
+               self.repoman_settings = repoman_settings
                self._is_capable = False
                self.binary = None
-               self._check_capable(options, repolevel, repoman_settings)
+               self._check_capable()
+
 
-       def _check_capable(self, options, repolevel, repoman_settings):
-               if options.mode == "manifest":
+       def _check_capable(self):
+               if self.options.mode == "manifest":
                        return
                self.binary = find_binary('xmllint')
                if not self.binary:
                        print(red("!!! xmllint not found. Can't check 
metadata.xml.\n"))
-                       if options.xml_parse or repolevel == 3:
-                               print("%s sorry, xmllint is needed.  failing\n" 
% red("!!!"))
-                               sys.exit(1)
                else:
-                       if not fetch_metadata_dtd(self.metadata_dtd, 
repoman_settings):
+                       if not fetch_metadata_dtd(self.metadata_dtd, 
self.repoman_settings):
                                sys.exit(1)
                        # this can be problematic if xmllint changes their 
output
                        self._is_capable = True
 
+
        @property
        def capable(self):
                return self._is_capable
 
-       def check(self, checkdir):
+
+       def check(self, checkdir, repolevel):
+               '''Runs checks on the package metadata.xml file
+
+               @param checkdir: string, path
+               @param repolevel: integer
+               @return boolean, False == bad metadata
+               '''
                if not self.capable:
+                       if self.options.xml_parse or repolevel == 3:
+                               print("%s sorry, xmllint is needed.  failing\n" 
% red("!!!"))
+                               sys.exit(1)
                        return True
                # xmlint can produce garbage output even on success, so only 
dump
                # the ouput when it fails.

diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py 
b/pym/repoman/checks/ebuilds/pkgmetadata.py
index 0778696..674d32f 100644
--- a/pym/repoman/checks/ebuilds/pkgmetadata.py
+++ b/pym/repoman/checks/ebuilds/pkgmetadata.py
@@ -38,27 +38,28 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder, 
XmlLint
 class PkgMetadata(object):
        '''Package metadata.xml checks'''
 
-       def __init__(self, options, qatracker, repolevel, repoman_settings):
+       def __init__(self, options, qatracker, repoman_settings):
                '''PkgMetadata init function
 
                @param options: ArgumentParser.parse_known_args(argv[1:]) 
options
                @param qatracker: QATracker instance
-               @param repolevel: integer
                @param repoman_settings: settings instance
                '''
                self.options = options
                self.qatracker = qatracker
-               self.repolevel = repolevel
                self.repoman_settings = repoman_settings
                self.musedict = {}
+               self.xmllint = XmlLint(self.options, self.repoman_settings)
+
 
 
-       def check(self, xpkg, checkdir, checkdirlist):
+       def check(self, xpkg, checkdir, checkdirlist, repolevel):
                '''Performs the checks on the metadata.xml for the package
 
                @param xpkg: the pacakge being checked
                @param checkdir: string, directory path
                @param checkdirlist: list of checkdir's
+               @param repolevel: integer
                '''
 
                self.musedict = {}
@@ -165,8 +166,7 @@ class PkgMetadata(object):
 
                        # Only carry out if in package directory or check forced
                        if not metadata_bad:
-                               xmllint = XmlLint(self.options, self.repolevel, 
self.repoman_settings)
-                               if not xmllint.check(checkdir):
+                               if not self.xmllint.check(checkdir, repolevel):
                                        
self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml")
                        del metadata_bad
                return

Reply via email to