diff options
| -rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 9 | ||||
| -rw-r--r-- | bitbake/lib/toaster/orm/models.py | 23 | ||||
| -rwxr-xr-x | bitbake/lib/toaster/toastergui/views.py | 2 |
3 files changed, 23 insertions, 11 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index c09955157a..87e03e7c61 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
| @@ -146,7 +146,7 @@ class ORMWrapper(object): | |||
| 146 | prj = Project.objects.get(pk = project_id) | 146 | prj = Project.objects.get(pk = project_id) |
| 147 | 147 | ||
| 148 | else: # this build was triggered by a legacy system, or command line interactive mode | 148 | else: # this build was triggered by a legacy system, or command line interactive mode |
| 149 | prj = Project.objects.get_default_project() | 149 | prj = Project.objects.get_or_create_default_project() |
| 150 | logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj) | 150 | logger.debug(1, "buildinfohelper: project is not specified, defaulting to %s" % prj) |
| 151 | 151 | ||
| 152 | 152 | ||
| @@ -308,6 +308,11 @@ class ORMWrapper(object): | |||
| 308 | # then we are wholly responsible for the data | 308 | # then we are wholly responsible for the data |
| 309 | # and therefore we return the 'real' recipe rather than the build | 309 | # and therefore we return the 'real' recipe rather than the build |
| 310 | # history copy of the recipe. | 310 | # history copy of the recipe. |
| 311 | if recipe_information['layer_version'].build is not None and \ | ||
| 312 | recipe_information['layer_version'].build.project == \ | ||
| 313 | Project.objects.get_or_create_default_project(): | ||
| 314 | return recipe | ||
| 315 | |||
| 311 | if built_recipe is None: | 316 | if built_recipe is None: |
| 312 | return recipe | 317 | return recipe |
| 313 | 318 | ||
| @@ -345,7 +350,7 @@ class ORMWrapper(object): | |||
| 345 | # If we're doing a command line build then associate this new layer with the | 350 | # If we're doing a command line build then associate this new layer with the |
| 346 | # project to avoid it 'contaminating' toaster data | 351 | # project to avoid it 'contaminating' toaster data |
| 347 | project = None | 352 | project = None |
| 348 | if build_obj.project == Project.objects.get_default_project(): | 353 | if build_obj.project == Project.objects.get_or_create_default_project(): |
| 349 | project = build_obj.project | 354 | project = build_obj.project |
| 350 | 355 | ||
| 351 | layer_version_object, _ = Layer_Version.objects.get_or_create( | 356 | layer_version_object, _ = Layer_Version.objects.get_or_create( |
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 0174233498..4a868e7ded 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
| @@ -91,18 +91,25 @@ class ProjectManager(models.Manager): | |||
| 91 | 91 | ||
| 92 | return prj | 92 | return prj |
| 93 | 93 | ||
| 94 | def create(self, *args, **kwargs): | ||
| 95 | raise Exception("Invalid call to Project.objects.create. Use Project.objects.create_project() to create a project") | ||
| 96 | |||
| 97 | # return single object with is_default = True | 94 | # return single object with is_default = True |
| 98 | def get_default_project(self): | 95 | def get_or_create_default_project(self): |
| 99 | projects = super(ProjectManager, self).filter(is_default = True) | 96 | projects = super(ProjectManager, self).filter(is_default = True) |
| 97 | |||
| 100 | if len(projects) > 1: | 98 | if len(projects) > 1: |
| 101 | raise Exception("Inconsistent project data: multiple " + | 99 | raise Exception('Inconsistent project data: multiple ' + |
| 102 | "default projects (i.e. with is_default=True)") | 100 | 'default projects (i.e. with is_default=True)') |
| 103 | elif len(projects) < 1: | 101 | elif len(projects) < 1: |
| 104 | raise Exception("Inconsistent project data: no default project found") | 102 | options = { |
| 105 | return projects[0] | 103 | 'name': 'Command line builds', |
| 104 | 'short_description': 'Project for builds started outside Toaster', | ||
| 105 | 'is_default': True | ||
| 106 | } | ||
| 107 | project = Project.objects.create(**options) | ||
| 108 | project.save() | ||
| 109 | |||
| 110 | return project | ||
| 111 | else: | ||
| 112 | return projects[0] | ||
| 106 | 113 | ||
| 107 | class Project(models.Model): | 114 | class Project(models.Model): |
| 108 | search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name'] | 115 | search_allowed_fields = ['name', 'short_description', 'release__name', 'release__branch_name'] |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 243bb09d62..16f27b8022 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
| @@ -73,7 +73,7 @@ class MimeTypeFinder(object): | |||
| 73 | def landing(request): | 73 | def landing(request): |
| 74 | # in build mode, we redirect to the command-line builds page | 74 | # in build mode, we redirect to the command-line builds page |
| 75 | # if there are any builds for the default (cli builds) project | 75 | # if there are any builds for the default (cli builds) project |
| 76 | default_project = Project.objects.get_default_project() | 76 | default_project = Project.objects.get_or_create_default_project() |
| 77 | default_project_builds = Build.objects.filter(project = default_project) | 77 | default_project_builds = Build.objects.filter(project = default_project) |
| 78 | 78 | ||
| 79 | # we only redirect to projects page if there is a user-generated project | 79 | # we only redirect to projects page if there is a user-generated project |
