commit: 6bd98ee4b60bb581cf535f666dbde4bf1fe6fce5
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 3 19:20:43 2014 +0000
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Sat Sep 5 21:47:36 2015 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=6bd98ee4
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