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