Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH] repoman: use metadata.dtd from rsync tree if available (bug 567746)
Date: Wed, 16 Dec 2015 06:46:29
Message-Id: 1450248366-2171-1-git-send-email-zmedico@gentoo.org
1 Search for metadata.dtd in current repository and masters, and if that
2 fails then fetch is as usual.
3
4 X-Gentoo-Bug: 567746
5 X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=567746
6 ---
7 pym/repoman/_xml.py | 9 +++++----
8 pym/repoman/checks/ebuilds/pkgmetadata.py | 6 ++++--
9 pym/repoman/scanner.py | 10 +++++++++-
10 3 files changed, 18 insertions(+), 7 deletions(-)
11
12 diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
13 index 0acda28..4ca6a0a 100644
14 --- a/pym/repoman/_xml.py
15 +++ b/pym/repoman/_xml.py
16 @@ -51,11 +51,12 @@ class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
17
18 class XmlLint(object):
19
20 - def __init__(self, options, repoman_settings):
21 - self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd')
22 + def __init__(self, options, repoman_settings, metadata_dtd=None):
23 + self.metadata_dtd = (metadata_dtd or
24 + os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd'))
25 self.options = options
26 self.repoman_settings = repoman_settings
27 - self._is_capable = False
28 + self._is_capable = metadata_dtd is not None
29 self.binary = None
30 self._check_capable()
31
32 @@ -65,7 +66,7 @@ class XmlLint(object):
33 self.binary = find_binary('xmllint')
34 if not self.binary:
35 print(red("!!! xmllint not found. Can't check metadata.xml.\n"))
36 - else:
37 + elif not self._is_capable:
38 if not fetch_metadata_dtd(self.metadata_dtd, self.repoman_settings):
39 sys.exit(1)
40 # this can be problematic if xmllint changes their output
41 diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py b/pym/repoman/checks/ebuilds/pkgmetadata.py
42 index f22ef19..74fec69 100644
43 --- a/pym/repoman/checks/ebuilds/pkgmetadata.py
44 +++ b/pym/repoman/checks/ebuilds/pkgmetadata.py
45 @@ -40,18 +40,20 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder, XmlLint
46 class PkgMetadata(object):
47 '''Package metadata.xml checks'''
48
49 - def __init__(self, options, qatracker, repoman_settings):
50 + def __init__(self, options, qatracker, repoman_settings, metadata_dtd=None):
51 '''PkgMetadata init function
52
53 @param options: ArgumentParser.parse_known_args(argv[1:]) options
54 @param qatracker: QATracker instance
55 @param repoman_settings: settings instance
56 + @param metadata_dtd: path of metadata.dtd
57 '''
58 self.options = options
59 self.qatracker = qatracker
60 self.repoman_settings = repoman_settings
61 self.musedict = {}
62 - self.xmllint = XmlLint(self.options, self.repoman_settings)
63 + self.xmllint = XmlLint(self.options, self.repoman_settings,
64 + metadata_dtd=metadata_dtd)
65
66 def check(self, xpkg, checkdir, checkdirlist, repolevel):
67 '''Performs the checks on the metadata.xml for the package
68 diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
69 index 9e5a313..9a87f65 100644
70 --- a/pym/repoman/scanner.py
71 +++ b/pym/repoman/scanner.py
72 @@ -82,6 +82,13 @@ class Scanner(object):
73 portage.util.stack_lists([self.categories], incremental=1))
74 self.categories = self.repo_settings.repoman_settings.categories
75
76 + metadata_dtd = None
77 + for path in reversed(self.repo_settings.repo_config.eclass_db.porttrees):
78 + path = os.path.join(path, 'metadata/dtd/metadata.dtd')
79 + if os.path.exists(path):
80 + metadata_dtd = path
81 + break
82 +
83 self.portdb = repo_settings.portdb
84 self.portdb.settings = self.repo_settings.repoman_settings
85 # We really only need to cache the metadata that's necessary for visibility
86 @@ -201,7 +208,8 @@ class Scanner(object):
87 self.status_check = VCSStatus(self.vcs_settings, self.qatracker)
88 self.fetchcheck = FetchChecks(
89 self.qatracker, self.repo_settings, self.portdb, self.vcs_settings)
90 - self.pkgmeta = PkgMetadata(self.options, self.qatracker, self.repo_settings.repoman_settings)
91 + self.pkgmeta = PkgMetadata(self.options, self.qatracker,
92 + self.repo_settings.repoman_settings, metadata_dtd=metadata_dtd)
93 self.thirdparty = ThirdPartyMirrors(self.repo_settings.repoman_settings, self.qatracker)
94 self.use_flag_checks = USEFlagChecks(self.qatracker, uselist)
95 self.keywordcheck = KeywordChecks(self.qatracker, self.options)
96 --
97 2.4.10

Replies