1 |
commit: bf7dc3159db2c15ff7aa61c2c72b143bbd420be0 |
2 |
Author: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue May 3 20:54:33 2016 +0000 |
4 |
Commit: Brian Dolbec <dolsen <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue May 3 20:54:33 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=bf7dc315 |
7 |
|
8 |
repoman/modules/.../pkgmetadata.py: Have xml validation log all qatracker errors |
9 |
|
10 |
Remove the use flag qatracker additions. |
11 |
Add all logged XMLSchema errors to the qatracker . |
12 |
This makes it a one run check to add all possible errors via the XMLSchema. |
13 |
|
14 |
pym/repoman/modules/scan/metadata/pkgmetadata.py | 80 +++++++++++------------- |
15 |
1 file changed, 36 insertions(+), 44 deletions(-) |
16 |
|
17 |
diff --git a/pym/repoman/modules/scan/metadata/pkgmetadata.py b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
18 |
index d6d8557..44b5edd 100644 |
19 |
--- a/pym/repoman/modules/scan/metadata/pkgmetadata.py |
20 |
+++ b/pym/repoman/modules/scan/metadata/pkgmetadata.py |
21 |
@@ -126,8 +126,7 @@ class PkgMetadata(ScanBase, USEFlagChecks): |
22 |
(xpkg, metadata_doctype_name, doctype_name)) |
23 |
|
24 |
# load USE flags from metadata.xml |
25 |
- self.musedict, metadata_bad = self._parse_metadata_use( |
26 |
- _metadata_xml, xpkg, metadata_bad) |
27 |
+ self.musedict = self._parse_metadata_use(_metadata_xml, xpkg) |
28 |
for atom in chain(*self.musedict.values()): |
29 |
if atom is None: |
30 |
continue |
31 |
@@ -147,15 +146,8 @@ class PkgMetadata(ScanBase, USEFlagChecks): |
32 |
# Only carry out if in package directory or check forced |
33 |
if not metadata_bad: |
34 |
validator = etree.XMLSchema(file=self.metadata_xsd) |
35 |
- try: |
36 |
- validator.assertValid(_metadata_xml) |
37 |
- except etree.DocumentInvalid as error: |
38 |
- self.qatracker.add_error( |
39 |
- "metadata.bad", |
40 |
- xpkg + "/metadata.xml: %s" |
41 |
- % (str(error)) |
42 |
- ) |
43 |
- del metadata_bad |
44 |
+ if not validator.validate(_metadata_xml): |
45 |
+ self._add_validate_errors(xpkg, validator.error_log) |
46 |
self.muselist = frozenset(self.musedict) |
47 |
return False |
48 |
|
49 |
@@ -178,7 +170,7 @@ class PkgMetadata(ScanBase, USEFlagChecks): |
50 |
% (xpkg, myflag)) |
51 |
return False |
52 |
|
53 |
- def _parse_metadata_use(self, xml_tree, xpkg, metadata_bad): |
54 |
+ def _parse_metadata_use(self, xml_tree, xpkg): |
55 |
""" |
56 |
Records are wrapped in XML as per GLEP 56 |
57 |
returns a dict with keys constisting of USE flag names and values |
58 |
@@ -188,7 +180,7 @@ class PkgMetadata(ScanBase, USEFlagChecks): |
59 |
|
60 |
usetags = xml_tree.findall("use") |
61 |
if not usetags: |
62 |
- return uselist, metadata_bad |
63 |
+ return uselist |
64 |
|
65 |
# It's possible to have multiple 'use' elements. |
66 |
for usetag in usetags: |
67 |
@@ -199,37 +191,37 @@ class PkgMetadata(ScanBase, USEFlagChecks): |
68 |
|
69 |
for flag in flags: |
70 |
pkg_flag = flag.get("name") |
71 |
- if pkg_flag is None: |
72 |
- metadata_bad = True |
73 |
- self.qatracker.add_error( |
74 |
- "metadata.bad", |
75 |
- "%s/metadata.xml: line: %s, '%s', missing attribute: name" |
76 |
- % (xpkg, flag.sourceline, flag.text)) |
77 |
- continue |
78 |
- flag_restrict = flag.get("restrict") |
79 |
- |
80 |
- # emulate the Element.itertext() method from python-2.7 |
81 |
- inner_text = [] |
82 |
- stack = [] |
83 |
- stack.append(flag) |
84 |
- while stack: |
85 |
- obj = stack.pop() |
86 |
- if isinstance(obj, basestring): |
87 |
- inner_text.append(obj) |
88 |
- continue |
89 |
- if isinstance(obj.text, basestring): |
90 |
- inner_text.append(obj.text) |
91 |
- if isinstance(obj.tail, basestring): |
92 |
- stack.append(obj.tail) |
93 |
- stack.extend(reversed(obj)) |
94 |
- |
95 |
- if pkg_flag not in uselist: |
96 |
- uselist[pkg_flag] = {} |
97 |
- |
98 |
- # (flag_restrict can be None) |
99 |
- uselist[pkg_flag][flag_restrict] = " ".join("".join(inner_text).split()) |
100 |
- |
101 |
- return uselist, metadata_bad |
102 |
+ if pkg_flag is not None: |
103 |
+ flag_restrict = flag.get("restrict") |
104 |
+ |
105 |
+ # emulate the Element.itertext() method from python-2.7 |
106 |
+ inner_text = [] |
107 |
+ stack = [] |
108 |
+ stack.append(flag) |
109 |
+ while stack: |
110 |
+ obj = stack.pop() |
111 |
+ if isinstance(obj, basestring): |
112 |
+ inner_text.append(obj) |
113 |
+ continue |
114 |
+ if isinstance(obj.text, basestring): |
115 |
+ inner_text.append(obj.text) |
116 |
+ if isinstance(obj.tail, basestring): |
117 |
+ stack.append(obj.tail) |
118 |
+ stack.extend(reversed(obj)) |
119 |
+ |
120 |
+ if flag.get("name") not in uselist: |
121 |
+ uselist[flag.get("name")] = {} |
122 |
+ |
123 |
+ # (flag_restrict can be None) |
124 |
+ uselist[flag.get("name")][flag_restrict] = " ".join("".join(inner_text).split()) |
125 |
+ return uselist |
126 |
+ |
127 |
+ def _add_validate_errors(self, xpkg, log): |
128 |
+ for error in log: |
129 |
+ self.qatracker.add_error( |
130 |
+ "metadata.bad", |
131 |
+ "%s/metadata.xml: line: %s, %s" |
132 |
+ % (xpkg, error.line, error.message)) |
133 |
|
134 |
@property |
135 |
def runInPkgs(self): |