diff options
author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2013-11-27 13:56:19 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-12-10 11:16:12 +0000 |
commit | ea307bbcff38fdc93aab438156ed60704e06d27a (patch) | |
tree | f58e0cd69ac7a61d1f31d060e84604aa40d1a92e /bitbake/lib/bb/ui/buildinfohelper.py | |
parent | 6cbc83fe8977c07ad2ac829f13fb850c054d89b7 (diff) | |
download | poky-ea307bbcff38fdc93aab438156ed60704e06d27a.tar.gz |
bitbake: toaster: move layer information reading code
In the processes of removing local system accesses
from toaster UI, we remove the layer data reading
code that was moved to toaster.bbclass, and
adapt the database writing code to read the data
from event sent by the toaster.bbclass
[YOCTO #5604]
(Bitbake rev: 33b60a940f58e8374a8c7baa9bf28a98f54cdf13)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/ui/buildinfohelper.py')
-rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 88 |
1 files changed, 16 insertions, 72 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index c99a51109b..b2e21ef2a6 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
@@ -20,8 +20,6 @@ import datetime | |||
20 | import sys | 20 | import sys |
21 | import bb | 21 | import bb |
22 | import re | 22 | import re |
23 | import subprocess | ||
24 | |||
25 | 23 | ||
26 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "toaster.toastermain.settings") | 24 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "toaster.toastermain.settings") |
27 | 25 | ||
@@ -125,10 +123,11 @@ class ORMWrapper(object): | |||
125 | 123 | ||
126 | return recipe_object | 124 | return recipe_object |
127 | 125 | ||
128 | def get_layer_version_object(self, layer_version_information): | 126 | def get_update_layer_version_object(self, build_obj, layer_obj, layer_version_information): |
129 | 127 | ||
130 | layer_version_object = Layer_Version.objects.get_or_create( | 128 | layer_version_object = Layer_Version.objects.get_or_create( |
131 | layer = layer_version_information['layer'], | 129 | build = build_obj, |
130 | layer = layer_obj, | ||
132 | branch = layer_version_information['branch'], | 131 | branch = layer_version_information['branch'], |
133 | commit = layer_version_information['commit'], | 132 | commit = layer_version_information['commit'], |
134 | priority = layer_version_information['priority'] | 133 | priority = layer_version_information['priority'] |
@@ -274,60 +273,6 @@ class BuildInfoHelper(object): | |||
274 | ################### | 273 | ################### |
275 | ## methods to convert event/external info into objects that the ORM layer uses | 274 | ## methods to convert event/external info into objects that the ORM layer uses |
276 | 275 | ||
277 | def _get_layer_dict(self, layer_path): | ||
278 | |||
279 | layer_info = {} | ||
280 | layer_name = layer_path.split('/')[-1] | ||
281 | layer_url = 'http://layers.openembedded.org/layerindex/layer/{layer}/' | ||
282 | layer_url_name = self._get_url_map_name(layer_name) | ||
283 | |||
284 | layer_info['name'] = layer_name | ||
285 | layer_info['local_path'] = layer_path | ||
286 | layer_info['layer_index_url'] = layer_url.format(layer=layer_url_name) | ||
287 | |||
288 | return layer_info | ||
289 | |||
290 | def _get_url_map_name(self, layer_name): | ||
291 | """ Some layers have a different name on openembedded.org site, | ||
292 | this method returns the correct name to use in the URL | ||
293 | """ | ||
294 | |||
295 | url_name = layer_name | ||
296 | url_mapping = {'meta': 'openembedded-core'} | ||
297 | |||
298 | for key in url_mapping.keys(): | ||
299 | if key == layer_name: | ||
300 | url_name = url_mapping[key] | ||
301 | |||
302 | return url_name | ||
303 | |||
304 | def _get_layer_information(self): | ||
305 | |||
306 | layer_info = {} | ||
307 | |||
308 | return layer_info | ||
309 | |||
310 | def _get_layer_version_information(self, layer_object): | ||
311 | |||
312 | layer_version_info = {} | ||
313 | layer_version_info['build'] = self.internal_state['build'] | ||
314 | layer_version_info['layer'] = layer_object | ||
315 | layer_version_info['branch'] = self._get_git_branch(layer_object.local_path) | ||
316 | layer_version_info['commit'] = self._get_git_revision(layer_object.local_path) | ||
317 | layer_version_info['priority'] = 0 | ||
318 | |||
319 | return layer_version_info | ||
320 | |||
321 | |||
322 | def _get_git_branch(self, layer_path): | ||
323 | branch = subprocess.Popen("git symbolic-ref HEAD 2>/dev/null ", cwd=layer_path, shell=True, stdout=subprocess.PIPE).communicate()[0] | ||
324 | branch = branch.replace('refs/heads/', '').rstrip() | ||
325 | return branch | ||
326 | |||
327 | def _get_git_revision(self, layer_path): | ||
328 | revision = subprocess.Popen("git rev-parse HEAD 2>/dev/null ", cwd=layer_path, shell=True, stdout=subprocess.PIPE).communicate()[0].rstrip() | ||
329 | return revision | ||
330 | |||
331 | 276 | ||
332 | def _get_build_information(self): | 277 | def _get_build_information(self): |
333 | build_info = {} | 278 | build_info = {} |
@@ -366,7 +311,7 @@ class BuildInfoHelper(object): | |||
366 | 311 | ||
367 | # Heuristics: we always match recipe to the deepest layer path that | 312 | # Heuristics: we always match recipe to the deepest layer path that |
368 | # we can match to the recipe file path | 313 | # we can match to the recipe file path |
369 | for bl in sorted(self.internal_state['layer_versions'], reverse=True, key=_slkey): | 314 | for bl in sorted(Layer_Version.objects.filter(build = self.internal_state['build']), reverse=True, key=_slkey): |
370 | if (path.startswith(bl.layer.local_path)): | 315 | if (path.startswith(bl.layer.local_path)): |
371 | return bl | 316 | return bl |
372 | 317 | ||
@@ -452,12 +397,12 @@ class BuildInfoHelper(object): | |||
452 | ################################ | 397 | ################################ |
453 | ## external available methods to store information | 398 | ## external available methods to store information |
454 | 399 | ||
455 | def store_layer_info(self): | 400 | def store_layer_info(self, event): |
456 | layers = self.server.runCommand(["getVariable", "BBLAYERS"])[0].strip().split(" ") | 401 | layerinfos = event.data |
457 | self.internal_state['layers'] = [] | 402 | self.internal_state['lvs'] = {} |
458 | for layer_path in { l for l in layers if len(l) }: | 403 | for layer in layerinfos: |
459 | layer_information = self._get_layer_dict(layer_path) | 404 | self.internal_state['lvs'][self.orm_wrapper.get_update_layer_object(layerinfos[layer])] = layerinfos[layer]['version'] |
460 | self.internal_state['layers'].append(self.orm_wrapper.get_update_layer_object(layer_information)) | 405 | |
461 | 406 | ||
462 | def store_started_build(self, event): | 407 | def store_started_build(self, event): |
463 | 408 | ||
@@ -466,6 +411,12 @@ class BuildInfoHelper(object): | |||
466 | build_obj = self.orm_wrapper.create_build_object(build_information) | 411 | build_obj = self.orm_wrapper.create_build_object(build_information) |
467 | self.internal_state['build'] = build_obj | 412 | self.internal_state['build'] = build_obj |
468 | 413 | ||
414 | # save layer version information for this build | ||
415 | for layer_obj in self.internal_state['lvs']: | ||
416 | self.orm_wrapper.get_update_layer_version_object(build_obj, layer_obj, self.internal_state['lvs'][layer_obj]) | ||
417 | |||
418 | del self.internal_state['lvs'] | ||
419 | |||
469 | # create target information | 420 | # create target information |
470 | target_information = {} | 421 | target_information = {} |
471 | target_information['targets'] = event.getPkgs() | 422 | target_information['targets'] = event.getPkgs() |
@@ -473,13 +424,6 @@ class BuildInfoHelper(object): | |||
473 | 424 | ||
474 | self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information) | 425 | self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information) |
475 | 426 | ||
476 | # Load layer information for the build | ||
477 | self.internal_state['layer_versions'] = [] | ||
478 | for layer_object in self.internal_state['layers']: | ||
479 | layer_version_information = self._get_layer_version_information(layer_object) | ||
480 | self.internal_state['layer_versions'].append(self.orm_wrapper.get_layer_version_object(layer_version_information)) | ||
481 | |||
482 | del self.internal_state['layers'] | ||
483 | # Save build configuration | 427 | # Save build configuration |
484 | self.orm_wrapper.save_build_variables(build_obj, self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]) | 428 | self.orm_wrapper.save_build_variables(build_obj, self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]) |
485 | 429 | ||