mirror of
https://git.yoctoproject.org/poky
synced 2026-06-02 01:19:52 +00:00
bitbake: toaster: Create default project with get_or_create* method
Rather than maintain data as part of the migrations (as was done for the default project previously), create the default (cli builds) project on demand as a by-product of getting it from the database. [YOCTO #8364] (Bitbake rev: 5fd8e90ab9b81d1bd0d301bc1c91228ecbbea74b) Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: brian avery <avery.brian@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
9de8dfa11a
commit
7a0c45e478
@@ -146,7 +146,7 @@ class ORMWrapper(object):
|
|||||||
prj = Project.objects.get(pk = project_id)
|
prj = Project.objects.get(pk = project_id)
|
||||||
|
|
||||||
else: # this build was triggered by a legacy system, or command line interactive mode
|
else: # this build was triggered by a legacy system, or command line interactive mode
|
||||||
prj = Project.objects.get_default_project()
|
prj = Project.objects.get_or_create_default_project()
|
||||||
logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj)
|
logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj)
|
||||||
|
|
||||||
|
|
||||||
@@ -308,6 +308,11 @@ class ORMWrapper(object):
|
|||||||
# then we are wholly responsible for the data
|
# then we are wholly responsible for the data
|
||||||
# and therefore we return the 'real' recipe rather than the build
|
# and therefore we return the 'real' recipe rather than the build
|
||||||
# history copy of the recipe.
|
# history copy of the recipe.
|
||||||
|
if recipe_information['layer_version'].build is not None and \
|
||||||
|
recipe_information['layer_version'].build.project == \
|
||||||
|
Project.objects.get_or_create_default_project():
|
||||||
|
return recipe
|
||||||
|
|
||||||
if built_recipe is None:
|
if built_recipe is None:
|
||||||
return recipe
|
return recipe
|
||||||
|
|
||||||
@@ -345,7 +350,7 @@ class ORMWrapper(object):
|
|||||||
# If we're doing a command line build then associate this new layer with the
|
# If we're doing a command line build then associate this new layer with the
|
||||||
# project to avoid it 'contaminating' toaster data
|
# project to avoid it 'contaminating' toaster data
|
||||||
project = None
|
project = None
|
||||||
if build_obj.project == Project.objects.get_default_project():
|
if build_obj.project == Project.objects.get_or_create_default_project():
|
||||||
project = build_obj.project
|
project = build_obj.project
|
||||||
|
|
||||||
layer_version_object, _ = Layer_Version.objects.get_or_create(
|
layer_version_object, _ = Layer_Version.objects.get_or_create(
|
||||||
|
|||||||
@@ -91,18 +91,25 @@ class ProjectManager(models.Manager):
|
|||||||
|
|
||||||
return prj
|
return prj
|
||||||
|
|
||||||
def create(self, *args, **kwargs):
|
|
||||||
raise Exception("Invalid call to Project.objects.create. Use Project.objects.create_project() to create a project")
|
|
||||||
|
|
||||||
# return single object with is_default = True
|
# return single object with is_default = True
|
||||||
def get_default_project(self):
|
def get_or_create_default_project(self):
|
||||||
projects = super(ProjectManager, self).filter(is_default = True)
|
projects = super(ProjectManager, self).filter(is_default = True)
|
||||||
|
|
||||||
if len(projects) > 1:
|
if len(projects) > 1:
|
||||||
raise Exception("Inconsistent project data: multiple " +
|
raise Exception('Inconsistent project data: multiple ' +
|
||||||
"default projects (i.e. with is_default=True)")
|
'default projects (i.e. with is_default=True)')
|
||||||
elif len(projects) < 1:
|
elif len(projects) < 1:
|
||||||
raise Exception("Inconsistent project data: no default project found")
|
options = {
|
||||||
return projects[0]
|
'name': 'Command line builds',
|
||||||
|
'short_description': 'Project for builds started outside Toaster',
|
||||||
|
'is_default': True
|
||||||
|
}
|
||||||
|
project = Project.objects.create(**options)
|
||||||
|
project.save()
|
||||||
|
|
||||||
|
return project
|
||||||
|
else:
|
||||||
|
return projects[0]
|
||||||
|
|
||||||
class Project(models.Model):
|
class Project(models.Model):
|
||||||
search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name']
|
search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name']
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ class MimeTypeFinder(object):
|
|||||||
def landing(request):
|
def landing(request):
|
||||||
# in build mode, we redirect to the command-line builds page
|
# in build mode, we redirect to the command-line builds page
|
||||||
# if there are any builds for the default (cli builds) project
|
# if there are any builds for the default (cli builds) project
|
||||||
default_project = Project.objects.get_default_project()
|
default_project = Project.objects.get_or_create_default_project()
|
||||||
default_project_builds = Build.objects.filter(project = default_project)
|
default_project_builds = Build.objects.filter(project = default_project)
|
||||||
|
|
||||||
# we only redirect to projects page if there is a user-generated project
|
# we only redirect to projects page if there is a user-generated project
|
||||||
|
|||||||
Reference in New Issue
Block a user