bitbake: toaster: orm Remove the layerindex specific up_branch fields
We don't need to keep track of layerindex data in our database. And using branch==release is very confusing in the schema. Instead use the existing Release definition to keep track of which release a layer_version is for. Remove the Branch model and all references to it. Create a migration path to convert from up_branches to their corresponding releases. (Bitbake rev: f8f4cffe6fd371f3a7e63690c68f3fcb5dc1f297) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
8b3146007f
commit
97278fb51c
|
@ -393,7 +393,7 @@ class ORMWrapper(object):
|
||||||
layer_copy, c = Layer_Version.objects.get_or_create(
|
layer_copy, c = Layer_Version.objects.get_or_create(
|
||||||
build=build_obj,
|
build=build_obj,
|
||||||
layer=layer_obj.layer,
|
layer=layer_obj.layer,
|
||||||
up_branch=layer_obj.up_branch,
|
release=layer_obj.release,
|
||||||
branch=layer_version_information['branch'],
|
branch=layer_version_information['branch'],
|
||||||
commit=layer_version_information['commit'],
|
commit=layer_version_information['commit'],
|
||||||
local_path=layer_version_information['local_path'],
|
local_path=layer_version_information['local_path'],
|
||||||
|
@ -625,8 +625,8 @@ class ORMWrapper(object):
|
||||||
Recipe,
|
Recipe,
|
||||||
name=built_recipe.name,
|
name=built_recipe.name,
|
||||||
layer_version__build=None,
|
layer_version__build=None,
|
||||||
layer_version__up_branch=
|
layer_version__release=
|
||||||
built_recipe.layer_version.up_branch,
|
built_recipe.layer_version.release,
|
||||||
file_path=built_recipe.file_path,
|
file_path=built_recipe.file_path,
|
||||||
version=built_recipe.version
|
version=built_recipe.version
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from orm.models import LayerSource, ToasterSetting, Branch, Layer, Layer_Version
|
from orm.models import LayerSource, ToasterSetting, Layer, Layer_Version
|
||||||
from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer
|
from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer
|
||||||
from django.db import IntegrityError
|
from django.db import IntegrityError
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -102,14 +102,24 @@ class Command(NoArgsCommand):
|
||||||
logger.info("Fetching metadata releases for %s",
|
logger.info("Fetching metadata releases for %s",
|
||||||
" ".join(whitelist_branch_names))
|
" ".join(whitelist_branch_names))
|
||||||
|
|
||||||
# keep a track of the id mappings so that layer_versions can be created
|
branches_info = _get_json_response(apilinks['branches'] +
|
||||||
# for these layers later on
|
"?filter=name:%s"
|
||||||
|
% "OR".join(whitelist_branch_names))
|
||||||
|
|
||||||
|
# Map the layer index branches to toaster releases
|
||||||
|
li_branch_id_to_toaster_release = {}
|
||||||
|
|
||||||
|
total = len(branches_info)
|
||||||
|
for i, branch in enumerate(branches_info):
|
||||||
|
li_branch_id_to_toaster_release[branch['id']] = \
|
||||||
|
Release.objects.get(name=branch['name'])
|
||||||
|
self.mini_progress("Releases", i, total)
|
||||||
|
|
||||||
|
# keep a track of the layerindex (li) id mappings so that
|
||||||
|
# layer_versions can be created for these layers later on
|
||||||
li_layer_id_to_toaster_layer_id = {}
|
li_layer_id_to_toaster_layer_id = {}
|
||||||
|
|
||||||
# We may need this? TODO
|
logger.info("Fetching layers")
|
||||||
#branches_info = _get_json_response(apilinks['branches'] +
|
|
||||||
# "?filter=name:%s"
|
|
||||||
# % "OR".join(whitelist_branch_names))
|
|
||||||
|
|
||||||
layers_info = _get_json_response(apilinks['layerItems'])
|
layers_info = _get_json_response(apilinks['layerItems'])
|
||||||
|
|
||||||
|
@ -179,6 +189,7 @@ class Command(NoArgsCommand):
|
||||||
lbi['layer'])
|
lbi['layer'])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
lv.release = li_branch_id_to_toaster_release[lbi['branch']]
|
||||||
lv.up_date = lbi['updated']
|
lv.up_date = lbi['updated']
|
||||||
lv.commit = lbi['actual_branch']
|
lv.commit = lbi['actual_branch']
|
||||||
lv.dirpath = lbi['vcs_subdir']
|
lv.dirpath = lbi['vcs_subdir']
|
||||||
|
|
|
@ -144,7 +144,7 @@ class ProjectManager(models.Manager):
|
||||||
for rdl in release.releasedefaultlayer_set.all():
|
for rdl in release.releasedefaultlayer_set.all():
|
||||||
lv = Layer_Version.objects.filter(
|
lv = Layer_Version.objects.filter(
|
||||||
layer__name=rdl.layer_name,
|
layer__name=rdl.layer_name,
|
||||||
up_branch__name=release.branch_name).first()
|
release=release).first()
|
||||||
|
|
||||||
if lv:
|
if lv:
|
||||||
ProjectLayer.objects.create(project=prj,
|
ProjectLayer.objects.create(project=prj,
|
||||||
|
@ -280,7 +280,7 @@ class Project(models.Model):
|
||||||
# guard on release, as it can be null
|
# guard on release, as it can be null
|
||||||
if self.release:
|
if self.release:
|
||||||
queryset = Layer_Version.objects.filter(
|
queryset = Layer_Version.objects.filter(
|
||||||
(Q(up_branch__name=self.release.branch_name) &
|
(Q(release=self.release) &
|
||||||
Q(build=None) &
|
Q(build=None) &
|
||||||
Q(project=None)) |
|
Q(project=None)) |
|
||||||
Q(project=self))
|
Q(project=self))
|
||||||
|
@ -1257,22 +1257,6 @@ class ReleaseDefaultLayer(models.Model):
|
||||||
layer_name = models.CharField(max_length=100, default="")
|
layer_name = models.CharField(max_length=100, default="")
|
||||||
|
|
||||||
|
|
||||||
# Branch class is synced with layerindex.Branch, branches can only come
|
|
||||||
# from remote layer indexes
|
|
||||||
class Branch(models.Model):
|
|
||||||
# id of branch in the layerindex
|
|
||||||
up_date = models.DateTimeField(null=True, default=None)
|
|
||||||
|
|
||||||
name = models.CharField(max_length=50)
|
|
||||||
short_description = models.CharField(max_length=50, blank=True)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name_plural = "Branches"
|
|
||||||
|
|
||||||
def __unicode__(self):
|
|
||||||
return self.name
|
|
||||||
|
|
||||||
|
|
||||||
class LayerSource(object):
|
class LayerSource(object):
|
||||||
""" Where the layer metadata came from """
|
""" Where the layer metadata came from """
|
||||||
TYPE_LOCAL = 0
|
TYPE_LOCAL = 0
|
||||||
|
@ -1321,7 +1305,7 @@ class Layer_Version(models.Model):
|
||||||
"""
|
"""
|
||||||
search_allowed_fields = ["layer__name", "layer__summary",
|
search_allowed_fields = ["layer__name", "layer__summary",
|
||||||
"layer__description", "layer__vcs_url",
|
"layer__description", "layer__vcs_url",
|
||||||
"dirpath", "up_branch__name", "commit", "branch"]
|
"dirpath", "release__name", "commit", "branch"]
|
||||||
|
|
||||||
build = models.ForeignKey(Build, related_name='layer_version_build',
|
build = models.ForeignKey(Build, related_name='layer_version_build',
|
||||||
default=None, null=True)
|
default=None, null=True)
|
||||||
|
@ -1333,8 +1317,8 @@ class Layer_Version(models.Model):
|
||||||
|
|
||||||
up_date = models.DateTimeField(null=True, default=timezone.now)
|
up_date = models.DateTimeField(null=True, default=timezone.now)
|
||||||
|
|
||||||
# layerindex specific field
|
# To which metadata release does this layer version belong to
|
||||||
up_branch = models.ForeignKey(Branch, null=True, default=None)
|
release = models.ForeignKey(Release, null=True, default=None)
|
||||||
|
|
||||||
branch = models.CharField(max_length=80)
|
branch = models.CharField(max_length=80)
|
||||||
commit = models.CharField(max_length=100)
|
commit = models.CharField(max_length=100)
|
||||||
|
@ -1368,7 +1352,7 @@ class Layer_Version(models.Model):
|
||||||
extra_path = self.dirpath
|
extra_path = self.dirpath
|
||||||
else:
|
else:
|
||||||
extra_path = path
|
extra_path = path
|
||||||
branchname = self.up_branch.name
|
branchname = self.release.name
|
||||||
url = base_url.replace('%branch%', branchname)
|
url = base_url.replace('%branch%', branchname)
|
||||||
|
|
||||||
# If there's a % in the path (e.g. a wildcard bbappend) we need to encode it
|
# If there's a % in the path (e.g. a wildcard bbappend) we need to encode it
|
||||||
|
@ -1404,8 +1388,8 @@ class Layer_Version(models.Model):
|
||||||
def get_vcs_reference(self):
|
def get_vcs_reference(self):
|
||||||
if self.branch is not None and len(self.branch) > 0:
|
if self.branch is not None and len(self.branch) > 0:
|
||||||
return self.branch
|
return self.branch
|
||||||
if self.up_branch is not None:
|
if self.release is not None:
|
||||||
return self.up_branch.name
|
return self.release.name
|
||||||
if self.commit is not None and len(self.commit) > 0:
|
if self.commit is not None and len(self.commit) > 0:
|
||||||
return self.commit
|
return self.commit
|
||||||
return 'N/A'
|
return 'N/A'
|
||||||
|
|
|
@ -1,5 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<django-objects version="1.0">
|
<django-objects version="1.0">
|
||||||
|
<object pk="1" model="orm.bitbakeversion">
|
||||||
|
<field type="CharField" name="name">v2.3</field>
|
||||||
|
<field type="GitURLField" name="giturl">git://git.openembedded.org/bitbake</field>
|
||||||
|
<field type="CharField" name="dirpath">b</field>
|
||||||
|
<field type="CharField" name="branch">a</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="orm.release">
|
||||||
|
<field type="CharField" name="name">master</field>
|
||||||
|
<field type="CharField" name="description">master project</field>
|
||||||
|
<field to="orm.bitbake_version" name="bitbake_version">1</field>
|
||||||
|
</object>
|
||||||
<object pk="1" model="orm.project">
|
<object pk="1" model="orm.project">
|
||||||
<field type="CharField" name="name">a test project</field>
|
<field type="CharField" name="name">a test project</field>
|
||||||
<field type="CharField" name="short_description"></field>
|
<field type="CharField" name="short_description"></field>
|
||||||
|
@ -332,10 +343,6 @@
|
||||||
<field type="CharField" name="branch_name">master</field>
|
<field type="CharField" name="branch_name">master</field>
|
||||||
<field type="TextField" name="helptext"><None></None></field>
|
<field type="TextField" name="helptext"><None></None></field>
|
||||||
</object>
|
</object>
|
||||||
<object pk="1" model="orm.branch">
|
|
||||||
<field type="CharField" name="name">master</field>
|
|
||||||
<field type="CharField" name="short_description"></field>
|
|
||||||
</object>
|
|
||||||
<object pk="1" model="orm.layer">
|
<object pk="1" model="orm.layer">
|
||||||
<field type="DateTimeField" name="up_date"><None></None></field>
|
<field type="DateTimeField" name="up_date"><None></None></field>
|
||||||
<field type="CharField" name="name">a layer</field>
|
<field type="CharField" name="name">a layer</field>
|
||||||
|
@ -351,7 +358,7 @@
|
||||||
<field to="orm.build" name="build" rel="ManyToOneRel">1</field>
|
<field to="orm.build" name="build" rel="ManyToOneRel">1</field>
|
||||||
<field to="orm.layer" name="layer" rel="ManyToOneRel">1</field>
|
<field to="orm.layer" name="layer" rel="ManyToOneRel">1</field>
|
||||||
<field type="DateTimeField" name="up_date"><None></None></field>
|
<field type="DateTimeField" name="up_date"><None></None></field>
|
||||||
<field to="orm.branch" name="up_branch" rel="ManyToOneRel">1</field>
|
<field to="orm.release" name="release" rel="ManyToOneRel">1</field>
|
||||||
<field type="CharField" name="branch">master</field>
|
<field type="CharField" name="branch">master</field>
|
||||||
<field type="CharField" name="commit">abcdef123</field>
|
<field type="CharField" name="commit">abcdef123</field>
|
||||||
<field type="CharField" name="dirpath">/tmp/</field>
|
<field type="CharField" name="dirpath">/tmp/</field>
|
||||||
|
@ -363,7 +370,7 @@
|
||||||
<field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field>
|
<field to="orm.build" name="build" rel="ManyToOneRel"><None></None></field>
|
||||||
<field to="orm.layer" name="layer" rel="ManyToOneRel">2</field>
|
<field to="orm.layer" name="layer" rel="ManyToOneRel">2</field>
|
||||||
<field type="DateTimeField" name="up_date"><None></None></field>
|
<field type="DateTimeField" name="up_date"><None></None></field>
|
||||||
<field to="orm.branch" name="up_branch" rel="ManyToOneRel">1</field>
|
<field to="orm.release" name="release" rel="ManyToOneRel">1</field>
|
||||||
<field type="CharField" name="branch">testing-branch</field>
|
<field type="CharField" name="branch">testing-branch</field>
|
||||||
<field type="CharField" name="commit">9876fedcba</field>
|
<field type="CharField" name="commit">9876fedcba</field>
|
||||||
<field type="CharField" name="dirpath"><None></None></field>
|
<field type="CharField" name="dirpath"><None></None></field>
|
||||||
|
@ -375,7 +382,7 @@
|
||||||
<field to="orm.build" name="build" rel="ManyToOneRel">1</field>
|
<field to="orm.build" name="build" rel="ManyToOneRel">1</field>
|
||||||
<field to="orm.layer" name="layer" rel="ManyToOneRel">2</field>
|
<field to="orm.layer" name="layer" rel="ManyToOneRel">2</field>
|
||||||
<field type="DateTimeField" name="up_date"><None></None></field>
|
<field type="DateTimeField" name="up_date"><None></None></field>
|
||||||
<field to="orm.branch" name="up_branch" rel="ManyToOneRel">1</field>
|
<field to="orm.release" name="release" rel="ManyToOneRel">1</field>
|
||||||
<field type="CharField" name="branch">testing-branch</field>
|
<field type="CharField" name="branch">testing-branch</field>
|
||||||
<field type="CharField" name="commit">9876fedcba</field>
|
<field type="CharField" name="commit">9876fedcba</field>
|
||||||
<field type="CharField" name="dirpath"><None></None></field>
|
<field type="CharField" name="dirpath"><None></None></field>
|
||||||
|
|
|
@ -31,7 +31,7 @@ from orm.models import Project, Release, BitbakeVersion, Package, LogMessage
|
||||||
from orm.models import LayerSource, Layer, Build
|
from orm.models import LayerSource, Layer, Build
|
||||||
from orm.models import Layer_Version, Recipe, Machine, ProjectLayer, Target
|
from orm.models import Layer_Version, Recipe, Machine, ProjectLayer, Target
|
||||||
from orm.models import CustomImageRecipe, ProjectVariable
|
from orm.models import CustomImageRecipe, ProjectVariable
|
||||||
from orm.models import Branch, CustomImagePackage
|
from orm.models import CustomImagePackage
|
||||||
|
|
||||||
import toastermain
|
import toastermain
|
||||||
import inspect
|
import inspect
|
||||||
|
|
|
@ -161,7 +161,7 @@ def _lv_to_dict(prj, x = None):
|
||||||
return {"id": x.pk,
|
return {"id": x.pk,
|
||||||
"name": x.layer.name,
|
"name": x.layer.name,
|
||||||
"tooltip": "%s | %s" % (x.layer.vcs_url,x.get_vcs_reference()),
|
"tooltip": "%s | %s" % (x.layer.vcs_url,x.get_vcs_reference()),
|
||||||
"detail": "(%s" % x.layer.vcs_url + (")" if x.up_branch == None else " | "+x.get_vcs_reference()+")"),
|
"detail": "(%s" % x.layer.vcs_url + (")" if x.release == None else " | "+x.get_vcs_reference()+")"),
|
||||||
"giturl": x.layer.vcs_url,
|
"giturl": x.layer.vcs_url,
|
||||||
"layerdetailurl" : reverse('layerdetails', args=(prj.id,x.pk)),
|
"layerdetailurl" : reverse('layerdetails', args=(prj.id,x.pk)),
|
||||||
"revision" : x.get_vcs_reference(),
|
"revision" : x.get_vcs_reference(),
|
||||||
|
@ -1288,7 +1288,7 @@ if True:
|
||||||
from django.contrib.auth import authenticate, login
|
from django.contrib.auth import authenticate, login
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
|
||||||
from orm.models import Branch, LayerSource, ToasterSetting, Release, Machine, LayerVersionDependency
|
from orm.models import LayerSource, ToasterSetting, Release, Machine, LayerVersionDependency
|
||||||
from bldcontrol.models import BuildRequest
|
from bldcontrol.models import BuildRequest
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -1667,9 +1667,6 @@ if True:
|
||||||
post_data[key] = val.strip()
|
post_data[key] = val.strip()
|
||||||
|
|
||||||
|
|
||||||
# We need to know what release the current project is so that we
|
|
||||||
# can set the imported layer's up_branch_id
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
layer, layer_created = Layer.objects.get_or_create(name=post_data['name'])
|
layer, layer_created = Layer.objects.get_or_create(name=post_data['name'])
|
||||||
except MultipleObjectsReturned:
|
except MultipleObjectsReturned:
|
||||||
|
@ -1759,7 +1756,6 @@ if True:
|
||||||
|
|
||||||
return HttpResponse(jsonfilter(json_response), content_type = "application/json")
|
return HttpResponse(jsonfilter(json_response), content_type = "application/json")
|
||||||
|
|
||||||
|
|
||||||
@xhr_response
|
@xhr_response
|
||||||
def xhr_customrecipe(request):
|
def xhr_customrecipe(request):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue