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 |