Gentoo Archives: gentoo-commits

From: Brian Dolbec <dolsen@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:repoman commit in: pym/repoman/modules/scan/metadata/
Date: Tue, 03 May 2016 20:58:20
Message-Id: 1462308873.bf7dc3159db2c15ff7aa61c2c72b143bbd420be0.dolsen@gentoo
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):