Gentoo Archives: gentoo-commits

From: Brian Dolbec <brian.dolbec@×××××.com>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/, pym/repoman/checks/ebuilds/
Date: Wed, 01 Oct 2014 23:46:46
Message-Id: 1412207133.7dc0305c383403bb643d8e9cba967064c87aa1c6.dol-sen@gentoo
1 commit: 7dc0305c383403bb643d8e9cba967064c87aa1c6
2 Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org>
3 AuthorDate: Tue Jun 3 19:20:43 2014 +0000
4 Commit: Brian Dolbec <brian.dolbec <AT> gmail <DOT> com>
5 CommitDate: Wed Oct 1 23:45:33 2014 +0000
6 URL: http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=7dc0305c
7
8 Repoman: Refactor PkgMetadata and XmlLint classes for variable data passed in
9
10 Move all non-consistent data to be passed in via the check functions.
11 Initialize XmlLint once in the PkgMetadata class __init__().
12
13 ---
14 pym/repoman/_xml.py | 33 ++++++++++++++++++++++---------
15 pym/repoman/checks/ebuilds/pkgmetadata.py | 12 +++++------
16 2 files changed, 30 insertions(+), 15 deletions(-)
17
18 diff --git a/pym/repoman/_xml.py b/pym/repoman/_xml.py
19 index b97c027..d5b5a5e 100644
20 --- a/pym/repoman/_xml.py
21 +++ b/pym/repoman/_xml.py
22 @@ -14,6 +14,8 @@ from repoman._subprocess import repoman_getstatusoutput
23
24
25 class _XMLParser(xml.etree.ElementTree.XMLParser):
26 +
27 +
28 def __init__(self, data, **kwargs):
29 xml.etree.ElementTree.XMLParser.__init__(self, **kwargs)
30 self._portage_data = data
31 @@ -25,11 +27,13 @@ class _XMLParser(xml.etree.ElementTree.XMLParser):
32 self.parser.StartDoctypeDeclHandler = \
33 self._portage_StartDoctypeDeclHandler
34
35 +
36 def _portage_XmlDeclHandler(self, version, encoding, standalone):
37 if self._base_XmlDeclHandler is not None:
38 self._base_XmlDeclHandler(version, encoding, standalone)
39 self._portage_data["XML_DECLARATION"] = (version, encoding, standalone)
40
41 +
42 def _portage_StartDoctypeDeclHandler(
43 self, doctypeName, systemId, publicId, has_internal_subset):
44 if self._base_StartDoctypeDeclHandler is not None:
45 @@ -49,33 +53,44 @@ class _MetadataTreeBuilder(xml.etree.ElementTree.TreeBuilder):
46
47 class XmlLint(object):
48
49 - def __init__(self, options, repolevel, repoman_settings):
50 + def __init__(self, options, repoman_settings):
51 self.metadata_dtd = os.path.join(repoman_settings["DISTDIR"], 'metadata.dtd')
52 + self.options = options
53 + self.repoman_settings = repoman_settings
54 self._is_capable = False
55 self.binary = None
56 - self._check_capable(options, repolevel, repoman_settings)
57 + self._check_capable()
58 +
59
60 - def _check_capable(self, options, repolevel, repoman_settings):
61 - if options.mode == "manifest":
62 + def _check_capable(self):
63 + if self.options.mode == "manifest":
64 return
65 self.binary = find_binary('xmllint')
66 if not self.binary:
67 print(red("!!! xmllint not found. Can't check metadata.xml.\n"))
68 - if options.xml_parse or repolevel == 3:
69 - print("%s sorry, xmllint is needed. failing\n" % red("!!!"))
70 - sys.exit(1)
71 else:
72 - if not fetch_metadata_dtd(self.metadata_dtd, repoman_settings):
73 + if not fetch_metadata_dtd(self.metadata_dtd, self.repoman_settings):
74 sys.exit(1)
75 # this can be problematic if xmllint changes their output
76 self._is_capable = True
77
78 +
79 @property
80 def capable(self):
81 return self._is_capable
82
83 - def check(self, checkdir):
84 +
85 + def check(self, checkdir, repolevel):
86 + '''Runs checks on the package metadata.xml file
87 +
88 + @param checkdir: string, path
89 + @param repolevel: integer
90 + @return boolean, False == bad metadata
91 + '''
92 if not self.capable:
93 + if self.options.xml_parse or repolevel == 3:
94 + print("%s sorry, xmllint is needed. failing\n" % red("!!!"))
95 + sys.exit(1)
96 return True
97 # xmlint can produce garbage output even on success, so only dump
98 # the ouput when it fails.
99
100 diff --git a/pym/repoman/checks/ebuilds/pkgmetadata.py b/pym/repoman/checks/ebuilds/pkgmetadata.py
101 index 0778696..674d32f 100644
102 --- a/pym/repoman/checks/ebuilds/pkgmetadata.py
103 +++ b/pym/repoman/checks/ebuilds/pkgmetadata.py
104 @@ -38,27 +38,28 @@ from repoman._xml import _XMLParser, _MetadataTreeBuilder, XmlLint
105 class PkgMetadata(object):
106 '''Package metadata.xml checks'''
107
108 - def __init__(self, options, qatracker, repolevel, repoman_settings):
109 + def __init__(self, options, qatracker, repoman_settings):
110 '''PkgMetadata init function
111
112 @param options: ArgumentParser.parse_known_args(argv[1:]) options
113 @param qatracker: QATracker instance
114 - @param repolevel: integer
115 @param repoman_settings: settings instance
116 '''
117 self.options = options
118 self.qatracker = qatracker
119 - self.repolevel = repolevel
120 self.repoman_settings = repoman_settings
121 self.musedict = {}
122 + self.xmllint = XmlLint(self.options, self.repoman_settings)
123 +
124
125
126 - def check(self, xpkg, checkdir, checkdirlist):
127 + def check(self, xpkg, checkdir, checkdirlist, repolevel):
128 '''Performs the checks on the metadata.xml for the package
129
130 @param xpkg: the pacakge being checked
131 @param checkdir: string, directory path
132 @param checkdirlist: list of checkdir's
133 + @param repolevel: integer
134 '''
135
136 self.musedict = {}
137 @@ -165,8 +166,7 @@ class PkgMetadata(object):
138
139 # Only carry out if in package directory or check forced
140 if not metadata_bad:
141 - xmllint = XmlLint(self.options, self.repolevel, self.repoman_settings)
142 - if not xmllint.check(checkdir):
143 + if not self.xmllint.check(checkdir, repolevel):
144 self.qatracker.add_error("metadata.bad", xpkg + "/metadata.xml")
145 del metadata_bad
146 return