Search for metadata.dtd in current repository and masters, and if that
fails then fetch is as usual.
X-Gentoo-Bug: 567746
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=567746
---
pym/repoman/_xml.py | 9 +
pym/repoman/checks/ebuilds/pkgmetadata.py | 6 --
pym/repoman/scanner.py| 10 +-
3 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
index 0acda28..4ca6a0a 100644
--- a/pym/repoman/_xml.py
+++ b/pym/repoman/_xml.py
@@ -51,11 +51,12 @@ class
_MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
class XmlLint(object):
- def __init__(self, options, repoman_settings):
- self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"],
'metadata.dtd')
+ def __init__(self, options, repoman_settings, metadata_dtd=None):
+ self.metadata_dtd = (metadata_dtd or
+ os.path.join(repoman_settings["DISTDIR"],
'metadata.dtd'))
self.options = options
self.repoman_settings = repoman_settings
- self._is_capable = False
+ self._is_capable = metadata_dtd is not None
self.binary = None
self._check_capable()
@@ -65,7 +66,7 @@ class XmlLint(object):
self.binary = find_binary('xmllint')
if not self.binary:
print(red("!!! xmllint not found. Can't check
metadata.xml.\n"))
- else:
+ elif not self._is_capable:
if not fetch_metadata_dtd(self.metadata_dtd,
self.repoman_settings):
sys.exit(1)
# this can be problematic if xmllint changes their
output
diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py
b/pym/repoman/checks/ebuilds/pkgmetadata.py
index f22ef19..74fec69 100644
--- a/pym/repoman/checks/ebuilds/pkgmetadata.py
+++ b/pym/repoman/checks/ebuilds/pkgmetadata.py
@@ -40,18 +40,20 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder,
XmlLint
class PkgMetadata(object):
'''Package metadata.xml checks'''
- def __init__(self, options, qatracker, repoman_settings):
+ def __init__(self, options, qatracker, repoman_settings,
metadata_dtd=None):
'''PkgMetadata init function
@param options: ArgumentParser.parse_known_args(argv[1:])
options
@param qatracker: QATracker instance
@param repoman_settings: settings instance
+ @param metadata_dtd: path of metadata.dtd
'''
self.options = options
self.qatracker = qatracker
self.repoman_settings = repoman_settings
self.musedict = {}
- self.xmllint = XmlLint(self.options, self.repoman_settings)
+ self.xmllint = XmlLint(self.options, self.repoman_settings,
+ metadata_dtd=metadata_dtd)
def check(self, xpkg, checkdir, checkdirlist, repolevel):
'''Performs the checks on the metadata.xml for the package
diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index 9e5a313..9a87f65 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -82,6 +82,13 @@ class Scanner(object):
portage.util.stack_lists([self.categories],
incremental=1))
self.categories = self.repo_settings.repoman_settings.categories
+ metadata_dtd = None
+ for path in
reversed(self.repo_settings.repo_config.eclass_db.porttrees):
+ path = os.path.join(path, 'metadata/dtd/metadata.dtd')
+ if os.path.exists(path):
+ metadata_dtd = path
+ break
+
self.portdb = repo_settings.portdb
self.portdb.settings = self.repo_settings.repoman_settings
# We really only need to cache the metadata that's necessary
for visibility
@@ -201,7 +208,8 @@ class Scanner(object):
self.status_check = VCSStatus(self.vcs_settings, self.qatracker)
self.fetchcheck = FetchChecks(
self.qatracker, self.repo_settings, self.portdb,
self.vcs_settings)
- self.pkgmeta = PkgMetadata(self.options, self.qatracker,
self.repo_settings.repoman_settings)
+ self.pkgmeta = PkgMetadata(self.options, self.qatracker,
+ self.repo_settings.repoman_settings,
metadata_dtd=metadata_dtd)
self.thirdparty =
ThirdPartyMirrors(self.repo_settings.repoman_settings, self.qatracker)
self.use_flag_checks = USEFlagChecks(self.qatracker, uselist)
self.keywordcheck = KeywordChecks(self.qatracker, self.options)
--
2.4.10