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>
This commit is contained in:
Alexandru DAMIAN 2013-11-27 13:56:19 +00:00 committed by Richard Purdie
parent 6cbc83fe89
commit ea307bbcff
3 changed files with 19 additions and 74 deletions

View File

@ -20,8 +20,6 @@ import datetime
import sys
import bb
import re
import subprocess
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "toaster.toastermain.settings")
@ -125,10 +123,11 @@ class ORMWrapper(object):
return recipe_object
def get_layer_version_object(self, layer_version_information):
def get_update_layer_version_object(self, build_obj, layer_obj, layer_version_information):
layer_version_object = Layer_Version.objects.get_or_create(
layer = layer_version_information['layer'],
build = build_obj,
layer = layer_obj,
branch = layer_version_information['branch'],
commit = layer_version_information['commit'],
priority = layer_version_information['priority']
@ -274,60 +273,6 @@ class BuildInfoHelper(object):
###################
## methods to convert event/external info into objects that the ORM layer uses
def _get_layer_dict(self, layer_path):
layer_info = {}
layer_name = layer_path.split('/')[-1]
layer_url = 'http://layers.openembedded.org/layerindex/layer/{layer}/'
layer_url_name = self._get_url_map_name(layer_name)
layer_info['name'] = layer_name
layer_info['local_path'] = layer_path
layer_info['layer_index_url'] = layer_url.format(layer=layer_url_name)
return layer_info
def _get_url_map_name(self, layer_name):
""" Some layers have a different name on openembedded.org site,
this method returns the correct name to use in the URL
"""
url_name = layer_name
url_mapping = {'meta': 'openembedded-core'}
for key in url_mapping.keys():
if key == layer_name:
url_name = url_mapping[key]
return url_name
def _get_layer_information(self):
layer_info = {}
return layer_info
def _get_layer_version_information(self, layer_object):
layer_version_info = {}
layer_version_info['build'] = self.internal_state['build']
layer_version_info['layer'] = layer_object
layer_version_info['branch'] = self._get_git_branch(layer_object.local_path)
layer_version_info['commit'] = self._get_git_revision(layer_object.local_path)
layer_version_info['priority'] = 0
return layer_version_info
def _get_git_branch(self, layer_path):
branch = subprocess.Popen("git symbolic-ref HEAD 2>/dev/null ", cwd=layer_path, shell=True, stdout=subprocess.PIPE).communicate()[0]
branch = branch.replace('refs/heads/', '').rstrip()
return branch
def _get_git_revision(self, layer_path):
revision = subprocess.Popen("git rev-parse HEAD 2>/dev/null ", cwd=layer_path, shell=True, stdout=subprocess.PIPE).communicate()[0].rstrip()
return revision
def _get_build_information(self):
build_info = {}
@ -366,7 +311,7 @@ class BuildInfoHelper(object):
# Heuristics: we always match recipe to the deepest layer path that
# we can match to the recipe file path
for bl in sorted(self.internal_state['layer_versions'], reverse=True, key=_slkey):
for bl in sorted(Layer_Version.objects.filter(build = self.internal_state['build']), reverse=True, key=_slkey):
if (path.startswith(bl.layer.local_path)):
return bl
@ -452,12 +397,12 @@ class BuildInfoHelper(object):
################################
## external available methods to store information
def store_layer_info(self):
layers = self.server.runCommand(["getVariable", "BBLAYERS"])[0].strip().split(" ")
self.internal_state['layers'] = []
for layer_path in { l for l in layers if len(l) }:
layer_information = self._get_layer_dict(layer_path)
self.internal_state['layers'].append(self.orm_wrapper.get_update_layer_object(layer_information))
def store_layer_info(self, event):
layerinfos = event.data
self.internal_state['lvs'] = {}
for layer in layerinfos:
self.internal_state['lvs'][self.orm_wrapper.get_update_layer_object(layerinfos[layer])] = layerinfos[layer]['version']
def store_started_build(self, event):
@ -466,6 +411,12 @@ class BuildInfoHelper(object):
build_obj = self.orm_wrapper.create_build_object(build_information)
self.internal_state['build'] = build_obj
# save layer version information for this build
for layer_obj in self.internal_state['lvs']:
self.orm_wrapper.get_update_layer_version_object(build_obj, layer_obj, self.internal_state['lvs'][layer_obj])
del self.internal_state['lvs']
# create target information
target_information = {}
target_information['targets'] = event.getPkgs()
@ -473,13 +424,6 @@ class BuildInfoHelper(object):
self.internal_state['targets'] = self.orm_wrapper.create_target_objects(target_information)
# Load layer information for the build
self.internal_state['layer_versions'] = []
for layer_object in self.internal_state['layers']:
layer_version_information = self._get_layer_version_information(layer_object)
self.internal_state['layer_versions'].append(self.orm_wrapper.get_layer_version_object(layer_version_information))
del self.internal_state['layers']
# Save build configuration
self.orm_wrapper.save_build_variables(build_obj, self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0])

View File

@ -93,7 +93,6 @@ def main(server, eventHandler, params ):
taskfailures = []
buildinfohelper = BuildInfoHelper(server, build_history_enabled)
buildinfohelper.store_layer_info()
while True:
@ -232,12 +231,13 @@ def main(server, eventHandler, params ):
warnings = 0
taskfailures = []
buildinfohelper = BuildInfoHelper(server, build_history_enabled)
buildinfohelper.store_layer_info()
continue
if isinstance(event, bb.event.MetadataEvent):
if event.type == "SinglePackageInfo":
buildinfohelper.store_build_package_information(event)
if event.type == "LayerInfo":
buildinfohelper.store_layer_info(event)
continue
# ignore

View File

@ -229,6 +229,7 @@ class Layer(models.Model):
class Layer_Version(models.Model):
build = models.ForeignKey(Build, related_name='layer_version_build')
layer = models.ForeignKey(Layer, related_name='layer_version_layer')
branch = models.CharField(max_length=50)
commit = models.CharField(max_length=100)