bitbake: toastergui: improvements in layer selection logic

This patch clearers and bring fixes for the layer selection
logic in order to enable information collected during build to be used
in configuring projects, specifically targeting the recipes
learned through the building process.

The patch also adds tests to verify the layer selection logic.

[YOCTO #7189]

(Bitbake rev: f0faba8ef0f08c98ac4bddf5b3954d540820d215)

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
2015-02-02 17:57:36 +00:00
committed by Richard Purdie
parent b741c9a4b4
commit 202d808f89
8 changed files with 224 additions and 53 deletions

View File

@@ -103,7 +103,7 @@ class Project(models.Model):
if release == None:
release = self.release
# layers on the same branch or layers specifically set for this project
queryset = Layer_Version.objects.filter((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = self))
queryset = Layer_Version.objects.filter((Q(up_branch__name = release.branch_name) & Q(project = None)) | Q(project = self) | Q(build__project = self))
if layer_name is not None:
# we select only a layer name
queryset = queryset.filter(layer__name = layer_name)
@@ -952,11 +952,24 @@ class Layer_Version(models.Model):
""" Returns an ordered layerversion list that satisfies a LayerVersionDependency using the layer name and the current Project Releases' LayerSource priority """
def _get_ls_priority(ls):
try:
# if there is no layer source, we have minus infinite priority, as we don't want this layer selected
if ls == None:
return -10000
return ls.releaselayersourcepriority_set.get(release=project.release).priority
except ReleaseLayerSourcePriority.DoesNotExist:
raise
# layers created for this project, or coming from a build inthe project
query = Q(project = project) | Q(build__project = project)
if self.up_branch is not None:
# the same up_branch name
query |= Q(up_branch__name=self.up_branch.name)
else:
# or we have a layer in the project that's similar to mine (See the layer.name constraint below)
query |= Q(projectlayer__project=project)
return sorted(
Layer_Version.objects.filter( layer__name = self.layer.name, up_branch__name = self.up_branch.name ),
Layer_Version.objects.filter(layer__name = self.layer.name).filter(query).select_related('layer_source', 'layer'),
key = lambda x: _get_ls_priority(x.layer_source),
reverse = True)
@@ -965,10 +978,12 @@ class Layer_Version(models.Model):
return self.commit
if self.branch is not None and len(self.branch) > 0:
return self.branch
return self.up_branch.name
if self.up_branch is not None:
return self.up_branch.name
raise Exception("Cannot determine the vcs_reference for layer version %s" % vars(self))
def __unicode__(self):
return str(self.layer) + " (" + self.commit +")"
return str(self.layer) + "(%s,%s)" % (self.get_vcs_reference(), self.build.project if self.build is not None else "None")
class Meta:
unique_together = ("layer_source", "up_id")