diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-12-17 23:31:07 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-12-18 16:19:34 +0000 |
commit | 739c420caa13bd87df6fd27bf69fb8be871a9e50 (patch) | |
tree | 0264696c94b00591982e61edc31cffc584873b39 /meta | |
parent | e4e0445431d64ba4ed9c59086791f189d218191b (diff) | |
download | poky-739c420caa13bd87df6fd27bf69fb8be871a9e50.tar.gz |
distrodata: Remove
The code in the tasks within this class are old and there are much better
ways to do these things now such as through tinfoil rather than writing csv
files incrementally with start/stop events and lock files.
Existing users of the code (mainly the do_checkpkg task) have been ported
over to tinfoil. Drop the class, any other users should also make use
of the tinfoil functionality.
(From OE-Core rev: 6e2a488f01e5e8bc6f06b6fac1d336bf5372a82b)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/distrodata.bbclass | 425 |
1 files changed, 0 insertions, 425 deletions
diff --git a/meta/classes/distrodata.bbclass b/meta/classes/distrodata.bbclass deleted file mode 100644 index 7712c8e40d..0000000000 --- a/meta/classes/distrodata.bbclass +++ /dev/null | |||
@@ -1,425 +0,0 @@ | |||
1 | include conf/distro/include/distro_alias.inc | ||
2 | |||
3 | addhandler distro_eventhandler | ||
4 | distro_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
5 | python distro_eventhandler() { | ||
6 | import oe.distro_check as dc | ||
7 | import csv | ||
8 | logfile = dc.create_log_file(e.data, "distrodata.csv") | ||
9 | |||
10 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
11 | with open(logfile, "a") as f: | ||
12 | writer = csv.writer(f) | ||
13 | writer.writerow(['Package', 'Description', 'Owner', 'License', | ||
14 | 'VerMatch', 'Version', 'Upstream', 'Reason', 'Recipe Status', | ||
15 | 'Distro 1', 'Distro 2', 'Distro 3']) | ||
16 | f.close() | ||
17 | bb.utils.unlockfile(lf) | ||
18 | |||
19 | return | ||
20 | } | ||
21 | |||
22 | addtask distrodata_np | ||
23 | do_distrodata_np[nostamp] = "1" | ||
24 | python do_distrodata_np() { | ||
25 | localdata = bb.data.createCopy(d) | ||
26 | pn = d.getVar("PN") | ||
27 | bb.note("Package Name: %s" % pn) | ||
28 | |||
29 | import oe.distro_check as dist_check | ||
30 | tmpdir = d.getVar('TMPDIR') | ||
31 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
32 | datetime = localdata.getVar('DATETIME') | ||
33 | dist_check.update_distro_data(distro_check_dir, datetime, localdata) | ||
34 | |||
35 | if pn.find("-native") != -1: | ||
36 | pnstripped = pn.split("-native") | ||
37 | bb.note("Native Split: %s" % pnstripped) | ||
38 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
39 | |||
40 | if pn.find("-cross") != -1: | ||
41 | pnstripped = pn.split("-cross") | ||
42 | bb.note("cross Split: %s" % pnstripped) | ||
43 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
44 | |||
45 | if pn.find("-crosssdk") != -1: | ||
46 | pnstripped = pn.split("-crosssdk") | ||
47 | bb.note("cross Split: %s" % pnstripped) | ||
48 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
49 | |||
50 | if pn.startswith("nativesdk-"): | ||
51 | pnstripped = pn.replace("nativesdk-", "") | ||
52 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
53 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
54 | |||
55 | |||
56 | if pn.find("-initial") != -1: | ||
57 | pnstripped = pn.split("-initial") | ||
58 | bb.note("initial Split: %s" % pnstripped) | ||
59 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
60 | |||
61 | """generate package information from .bb file""" | ||
62 | pname = localdata.getVar('PN') | ||
63 | pcurver = localdata.getVar('PV') | ||
64 | pdesc = localdata.getVar('DESCRIPTION') | ||
65 | if pdesc is not None: | ||
66 | pdesc = pdesc.replace(',','') | ||
67 | pdesc = pdesc.replace('\n','') | ||
68 | |||
69 | pgrp = localdata.getVar('SECTION') | ||
70 | plicense = localdata.getVar('LICENSE').replace(',','_') | ||
71 | |||
72 | rstatus = localdata.getVar('RECIPE_COLOR') | ||
73 | if rstatus is not None: | ||
74 | rstatus = rstatus.replace(',','') | ||
75 | |||
76 | pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION') | ||
77 | if pcurver == pupver: | ||
78 | vermatch="1" | ||
79 | else: | ||
80 | vermatch="0" | ||
81 | noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON') | ||
82 | if noupdate_reason is None: | ||
83 | noupdate="0" | ||
84 | else: | ||
85 | noupdate="1" | ||
86 | noupdate_reason = noupdate_reason.replace(',','') | ||
87 | |||
88 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
89 | rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE') | ||
90 | result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata) | ||
91 | |||
92 | bb.note("DISTRO: %s,%s,%s,%s,%s,%s,%s,%s,%s\n" % \ | ||
93 | (pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus)) | ||
94 | line = pn | ||
95 | for i in result: | ||
96 | line = line + "," + i | ||
97 | bb.note("%s\n" % line) | ||
98 | } | ||
99 | do_distrodata_np[vardepsexclude] = "DATETIME" | ||
100 | |||
101 | addtask distrodata | ||
102 | do_distrodata[nostamp] = "1" | ||
103 | python do_distrodata() { | ||
104 | import csv | ||
105 | logpath = d.getVar('LOG_DIR') | ||
106 | bb.utils.mkdirhier(logpath) | ||
107 | logfile = os.path.join(logpath, "distrodata.csv") | ||
108 | |||
109 | import oe.distro_check as dist_check | ||
110 | localdata = bb.data.createCopy(d) | ||
111 | tmpdir = d.getVar('TMPDIR') | ||
112 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
113 | datetime = localdata.getVar('DATETIME') | ||
114 | dist_check.update_distro_data(distro_check_dir, datetime, localdata) | ||
115 | |||
116 | pn = d.getVar("PN") | ||
117 | bb.note("Package Name: %s" % pn) | ||
118 | |||
119 | if pn.find("-native") != -1: | ||
120 | pnstripped = pn.split("-native") | ||
121 | bb.note("Native Split: %s" % pnstripped) | ||
122 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
123 | |||
124 | if pn.startswith("nativesdk-"): | ||
125 | pnstripped = pn.replace("nativesdk-", "") | ||
126 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
127 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
128 | |||
129 | if pn.find("-cross") != -1: | ||
130 | pnstripped = pn.split("-cross") | ||
131 | bb.note("cross Split: %s" % pnstripped) | ||
132 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
133 | |||
134 | if pn.find("-crosssdk") != -1: | ||
135 | pnstripped = pn.split("-crosssdk") | ||
136 | bb.note("cross Split: %s" % pnstripped) | ||
137 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
138 | |||
139 | if pn.find("-initial") != -1: | ||
140 | pnstripped = pn.split("-initial") | ||
141 | bb.note("initial Split: %s" % pnstripped) | ||
142 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
143 | |||
144 | """generate package information from .bb file""" | ||
145 | pname = localdata.getVar('PN') | ||
146 | pcurver = localdata.getVar('PV') | ||
147 | pdesc = localdata.getVar('DESCRIPTION') | ||
148 | if pdesc is not None: | ||
149 | pdesc = pdesc.replace(',','') | ||
150 | pdesc = pdesc.replace('\n','') | ||
151 | |||
152 | pgrp = localdata.getVar('SECTION') | ||
153 | plicense = localdata.getVar('LICENSE').replace(',','_') | ||
154 | |||
155 | rstatus = localdata.getVar('RECIPE_COLOR') | ||
156 | if rstatus is not None: | ||
157 | rstatus = rstatus.replace(',','') | ||
158 | |||
159 | pupver = localdata.getVar('RECIPE_UPSTREAM_VERSION') | ||
160 | if pcurver == pupver: | ||
161 | vermatch="1" | ||
162 | else: | ||
163 | vermatch="0" | ||
164 | |||
165 | noupdate_reason = localdata.getVar('RECIPE_NO_UPDATE_REASON') | ||
166 | if noupdate_reason is None: | ||
167 | noupdate="0" | ||
168 | else: | ||
169 | noupdate="1" | ||
170 | noupdate_reason = noupdate_reason.replace(',','') | ||
171 | |||
172 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
173 | rlrd = localdata.getVar('RECIPE_UPSTREAM_DATE') | ||
174 | # do the comparison | ||
175 | result = dist_check.compare_in_distro_packages_list(distro_check_dir, localdata) | ||
176 | |||
177 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
178 | with open(logfile, "a") as f: | ||
179 | row = [pname, pdesc, maintainer, plicense, vermatch, pcurver, pupver, noupdate_reason, rstatus] | ||
180 | row.extend(result) | ||
181 | |||
182 | writer = csv.writer(f) | ||
183 | writer.writerow(row) | ||
184 | f.close() | ||
185 | bb.utils.unlockfile(lf) | ||
186 | } | ||
187 | do_distrodata[vardepsexclude] = "DATETIME" | ||
188 | |||
189 | addhandler checkpkg_eventhandler | ||
190 | checkpkg_eventhandler[eventmask] = "bb.event.BuildStarted bb.event.BuildCompleted" | ||
191 | python checkpkg_eventhandler() { | ||
192 | import csv | ||
193 | |||
194 | def parse_csv_file(filename): | ||
195 | package_dict = {} | ||
196 | |||
197 | with open(filename, "r") as f: | ||
198 | reader = csv.reader(f, delimiter='\t') | ||
199 | for row in reader: | ||
200 | pn = row[0] | ||
201 | |||
202 | if reader.line_num == 1: | ||
203 | header = row | ||
204 | continue | ||
205 | |||
206 | if not pn in package_dict.keys(): | ||
207 | package_dict[pn] = row | ||
208 | f.close() | ||
209 | |||
210 | with open(filename, "w") as f: | ||
211 | writer = csv.writer(f, delimiter='\t') | ||
212 | writer.writerow(header) | ||
213 | for pn in package_dict.keys(): | ||
214 | writer.writerow(package_dict[pn]) | ||
215 | f.close() | ||
216 | |||
217 | del package_dict | ||
218 | |||
219 | if bb.event.getName(e) == "BuildStarted": | ||
220 | import oe.distro_check as dc | ||
221 | logfile = dc.create_log_file(e.data, "checkpkg.csv") | ||
222 | |||
223 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
224 | with open(logfile, "a") as f: | ||
225 | writer = csv.writer(f, delimiter='\t') | ||
226 | headers = ['Package', 'Version', 'Upver', 'License', 'Section', | ||
227 | 'Home', 'Release', 'Depends', 'BugTracker', 'PE', 'Description', | ||
228 | 'Status', 'Tracking', 'URI', 'MAINTAINER', 'NoUpReason'] | ||
229 | writer.writerow(headers) | ||
230 | f.close() | ||
231 | bb.utils.unlockfile(lf) | ||
232 | elif bb.event.getName(e) == "BuildCompleted": | ||
233 | import os | ||
234 | filename = "tmp/log/checkpkg.csv" | ||
235 | if os.path.isfile(filename): | ||
236 | lf = bb.utils.lockfile("%s.lock"%filename) | ||
237 | parse_csv_file(filename) | ||
238 | bb.utils.unlockfile(lf) | ||
239 | return | ||
240 | } | ||
241 | |||
242 | addtask checkpkg | ||
243 | do_checkpkg[nostamp] = "1" | ||
244 | python do_checkpkg() { | ||
245 | localdata = bb.data.createCopy(d) | ||
246 | import csv | ||
247 | import re | ||
248 | import tempfile | ||
249 | import subprocess | ||
250 | import oe.recipeutils | ||
251 | from bb.utils import vercmp_string | ||
252 | from bb.fetch2 import FetchError, NoMethodError, decodeurl | ||
253 | |||
254 | def get_upstream_version_and_status(): | ||
255 | |||
256 | # set if the upstream check fails reliably, e.g. absent git tags, or weird version format used on our or on upstream side. | ||
257 | upstream_version_unknown = localdata.getVar('UPSTREAM_VERSION_UNKNOWN') | ||
258 | # set if the upstream check cannot be reliably performed due to transient network failures, or server behaving weirdly. | ||
259 | # This one should be used sparingly, as it completely excludes a recipe from upstream checking. | ||
260 | upstream_check_unreliable = localdata.getVar('UPSTREAM_CHECK_UNRELIABLE') | ||
261 | |||
262 | if upstream_check_unreliable == "1": | ||
263 | return "N/A", "CHECK_IS_UNRELIABLE" | ||
264 | |||
265 | uv = oe.recipeutils.get_recipe_upstream_version(localdata) | ||
266 | pupver = uv['version'] if uv['version'] else "N/A" | ||
267 | pversion = uv['current_version'] | ||
268 | revision = uv['revision'] if uv['revision'] else "N/A" | ||
269 | |||
270 | if pupver == "N/A": | ||
271 | pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN" | ||
272 | else: | ||
273 | cmp = vercmp_string(pversion, pupver) | ||
274 | if cmp == -1: | ||
275 | pstatus = "UPDATE" if not upstream_version_unknown else "KNOWN_BROKEN" | ||
276 | elif cmp == 0: | ||
277 | pstatus = "MATCH" if not upstream_version_unknown else "KNOWN_BROKEN" | ||
278 | else: | ||
279 | pstatus = "UNKNOWN" if upstream_version_unknown else "UNKNOWN_BROKEN" | ||
280 | |||
281 | return pversion, pupver, pstatus, revision | ||
282 | |||
283 | |||
284 | """initialize log files.""" | ||
285 | logpath = d.getVar('LOG_DIR') | ||
286 | bb.utils.mkdirhier(logpath) | ||
287 | logfile = os.path.join(logpath, "checkpkg.csv") | ||
288 | |||
289 | """generate package information from .bb file""" | ||
290 | pname = d.getVar('PN') | ||
291 | |||
292 | if pname.find("-native") != -1: | ||
293 | if d.getVar('BBCLASSEXTEND'): | ||
294 | return | ||
295 | pnstripped = pname.split("-native") | ||
296 | bb.note("Native Split: %s" % pnstripped) | ||
297 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
298 | |||
299 | if pname.startswith("nativesdk-"): | ||
300 | if d.getVar('BBCLASSEXTEND'): | ||
301 | return | ||
302 | pnstripped = pname.replace("nativesdk-", "") | ||
303 | bb.note("NativeSDK Split: %s" % pnstripped) | ||
304 | localdata.setVar('OVERRIDES', "pn-" + pnstripped + ":" + d.getVar('OVERRIDES')) | ||
305 | |||
306 | if pname.find("-cross") != -1: | ||
307 | pnstripped = pname.split("-cross") | ||
308 | bb.note("cross Split: %s" % pnstripped) | ||
309 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
310 | |||
311 | if pname.find("-initial") != -1: | ||
312 | pnstripped = pname.split("-initial") | ||
313 | bb.note("initial Split: %s" % pnstripped) | ||
314 | localdata.setVar('OVERRIDES', "pn-" + pnstripped[0] + ":" + d.getVar('OVERRIDES')) | ||
315 | |||
316 | pdesc = localdata.getVar('DESCRIPTION') | ||
317 | pgrp = localdata.getVar('SECTION') | ||
318 | plicense = localdata.getVar('LICENSE') | ||
319 | psection = localdata.getVar('SECTION') | ||
320 | phome = localdata.getVar('HOMEPAGE') | ||
321 | prelease = localdata.getVar('PR') | ||
322 | pdepends = localdata.getVar('DEPENDS') | ||
323 | pbugtracker = localdata.getVar('BUGTRACKER') | ||
324 | ppe = localdata.getVar('PE') | ||
325 | psrcuri = localdata.getVar('SRC_URI') | ||
326 | maintainer = localdata.getVar('RECIPE_MAINTAINER') | ||
327 | |||
328 | pversion, pupver, pstatus, prevision = get_upstream_version_and_status() | ||
329 | |||
330 | if psrcuri: | ||
331 | psrcuri = psrcuri.split()[0] | ||
332 | else: | ||
333 | psrcuri = "none" | ||
334 | pdepends = "".join(pdepends.split("\t")) | ||
335 | pdesc = "".join(pdesc.split("\t")) | ||
336 | no_upgr_reason = d.getVar('RECIPE_NO_UPDATE_REASON') | ||
337 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
338 | with open(logfile, "a") as f: | ||
339 | writer = csv.writer(f, delimiter='\t') | ||
340 | writer.writerow([pname, pversion, pupver, plicense, psection, phome, | ||
341 | prelease, pdepends, pbugtracker, ppe, pdesc, pstatus, prevision, | ||
342 | psrcuri, maintainer, no_upgr_reason]) | ||
343 | f.close() | ||
344 | bb.utils.unlockfile(lf) | ||
345 | } | ||
346 | |||
347 | addhandler distro_check_eventhandler | ||
348 | distro_check_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
349 | python distro_check_eventhandler() { | ||
350 | """initialize log files.""" | ||
351 | import oe.distro_check as dc | ||
352 | result_file = dc.create_log_file(e.data, "distrocheck.csv") | ||
353 | return | ||
354 | } | ||
355 | |||
356 | addtask distro_check | ||
357 | do_distro_check[nostamp] = "1" | ||
358 | do_distro_check[vardepsexclude] += "DATETIME" | ||
359 | python do_distro_check() { | ||
360 | """checks if the package is present in other public Linux distros""" | ||
361 | import oe.distro_check as dc | ||
362 | import shutil | ||
363 | if bb.data.inherits_class('native', d) or bb.data.inherits_class('cross', d) or bb.data.inherits_class('sdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('nativesdk',d): | ||
364 | return | ||
365 | |||
366 | localdata = bb.data.createCopy(d) | ||
367 | tmpdir = d.getVar('TMPDIR') | ||
368 | distro_check_dir = os.path.join(tmpdir, "distro_check") | ||
369 | logpath = d.getVar('LOG_DIR') | ||
370 | bb.utils.mkdirhier(logpath) | ||
371 | result_file = os.path.join(logpath, "distrocheck.csv") | ||
372 | datetime = localdata.getVar('DATETIME') | ||
373 | dc.update_distro_data(distro_check_dir, datetime, localdata) | ||
374 | |||
375 | # do the comparison | ||
376 | result = dc.compare_in_distro_packages_list(distro_check_dir, d) | ||
377 | |||
378 | # save the results | ||
379 | dc.save_distro_check_result(result, datetime, result_file, d) | ||
380 | } | ||
381 | |||
382 | # | ||
383 | #Check Missing License Text. | ||
384 | #Use this task to generate the missing license text data for pkg-report system, | ||
385 | #then we can search those recipes which license text isn't exsit in common-licenses directory | ||
386 | # | ||
387 | addhandler checklicense_eventhandler | ||
388 | checklicense_eventhandler[eventmask] = "bb.event.BuildStarted" | ||
389 | python checklicense_eventhandler() { | ||
390 | """initialize log files.""" | ||
391 | import csv | ||
392 | import oe.distro_check as dc | ||
393 | logfile = dc.create_log_file(e.data, "missinglicense.csv") | ||
394 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
395 | with open(logfile, "a") as f: | ||
396 | writer = csv.writer(f, delimiter='\t') | ||
397 | writer.writerow(['Package', 'License', 'MissingLicense']) | ||
398 | f.close() | ||
399 | bb.utils.unlockfile(lf) | ||
400 | return | ||
401 | } | ||
402 | |||
403 | addtask checklicense | ||
404 | do_checklicense[nostamp] = "1" | ||
405 | python do_checklicense() { | ||
406 | import csv | ||
407 | import shutil | ||
408 | logpath = d.getVar('LOG_DIR') | ||
409 | bb.utils.mkdirhier(logpath) | ||
410 | pn = d.getVar('PN') | ||
411 | logfile = os.path.join(logpath, "missinglicense.csv") | ||
412 | generic_directory = d.getVar('COMMON_LICENSE_DIR') | ||
413 | license_types = d.getVar('LICENSE') | ||
414 | for license_type in ((license_types.replace('+', '').replace('|', '&') | ||
415 | .replace('(', '').replace(')', '').replace(';', '') | ||
416 | .replace(',', '').replace(" ", "").split("&"))): | ||
417 | if not os.path.isfile(os.path.join(generic_directory, license_type)): | ||
418 | lf = bb.utils.lockfile("%s.lock" % logfile) | ||
419 | with open(logfile, "a") as f: | ||
420 | writer = csv.writer(f, delimiter='\t') | ||
421 | writer.writerow([pn, license_types, license_type]) | ||
422 | f.close() | ||
423 | bb.utils.unlockfile(lf) | ||
424 | return | ||
425 | } | ||