diff options
Diffstat (limited to 'bitbake/lib/toaster/orm/models.py')
-rw-r--r-- | bitbake/lib/toaster/orm/models.py | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 3a7dff8ca6..306c4fafa8 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
@@ -121,8 +121,15 @@ class ToasterSetting(models.Model): | |||
121 | 121 | ||
122 | 122 | ||
123 | class ProjectManager(models.Manager): | 123 | class ProjectManager(models.Manager): |
124 | def create_project(self, name, release): | 124 | def create_project(self, name, release, existing_project=None): |
125 | if release is not None: | 125 | if existing_project and (release is not None): |
126 | prj = existing_project | ||
127 | prj.bitbake_version = release.bitbake_version | ||
128 | prj.release = release | ||
129 | # Delete the previous ProjectLayer mappings | ||
130 | for pl in ProjectLayer.objects.filter(project=prj): | ||
131 | pl.delete() | ||
132 | elif release is not None: | ||
126 | prj = self.model(name=name, | 133 | prj = self.model(name=name, |
127 | bitbake_version=release.bitbake_version, | 134 | bitbake_version=release.bitbake_version, |
128 | release=release) | 135 | release=release) |
@@ -130,15 +137,14 @@ class ProjectManager(models.Manager): | |||
130 | prj = self.model(name=name, | 137 | prj = self.model(name=name, |
131 | bitbake_version=None, | 138 | bitbake_version=None, |
132 | release=None) | 139 | release=None) |
133 | |||
134 | prj.save() | 140 | prj.save() |
135 | 141 | ||
136 | for defaultconf in ToasterSetting.objects.filter( | 142 | for defaultconf in ToasterSetting.objects.filter( |
137 | name__startswith="DEFCONF_"): | 143 | name__startswith="DEFCONF_"): |
138 | name = defaultconf.name[8:] | 144 | name = defaultconf.name[8:] |
139 | ProjectVariable.objects.create(project=prj, | 145 | pv,create = ProjectVariable.objects.get_or_create(project=prj,name=name) |
140 | name=name, | 146 | pv.value = defaultconf.value |
141 | value=defaultconf.value) | 147 | pv.save() |
142 | 148 | ||
143 | if release is None: | 149 | if release is None: |
144 | return prj | 150 | return prj |
@@ -197,6 +203,11 @@ class Project(models.Model): | |||
197 | user_id = models.IntegerField(null=True) | 203 | user_id = models.IntegerField(null=True) |
198 | objects = ProjectManager() | 204 | objects = ProjectManager() |
199 | 205 | ||
206 | # build directory override (e.g. imported) | ||
207 | builddir = models.TextField() | ||
208 | # merge the Toaster configure attributes directly into the standard conf files | ||
209 | merged_attr = models.BooleanField(default=False) | ||
210 | |||
200 | # set to True for the project which is the default container | 211 | # set to True for the project which is the default container |
201 | # for builds initiated by the command line etc. | 212 | # for builds initiated by the command line etc. |
202 | is_default= models.BooleanField(default=False) | 213 | is_default= models.BooleanField(default=False) |
@@ -305,6 +316,15 @@ class Project(models.Model): | |||
305 | return layer_versions | 316 | return layer_versions |
306 | 317 | ||
307 | 318 | ||
319 | def get_default_image_recipe(self): | ||
320 | try: | ||
321 | return self.projectvariable_set.get(name="DEFAULT_IMAGE").value | ||
322 | except (ProjectVariable.DoesNotExist,IndexError): | ||
323 | return None; | ||
324 | |||
325 | def get_is_new(self): | ||
326 | return self.get_variable(Project.PROJECT_SPECIFIC_ISNEW) | ||
327 | |||
308 | def get_available_machines(self): | 328 | def get_available_machines(self): |
309 | """ Returns QuerySet of all Machines which are provided by the | 329 | """ Returns QuerySet of all Machines which are provided by the |
310 | Layers currently added to the Project """ | 330 | Layers currently added to the Project """ |
@@ -353,6 +373,32 @@ class Project(models.Model): | |||
353 | 373 | ||
354 | return queryset | 374 | return queryset |
355 | 375 | ||
376 | # Project Specific status management | ||
377 | PROJECT_SPECIFIC_STATUS = 'INTERNAL_PROJECT_SPECIFIC_STATUS' | ||
378 | PROJECT_SPECIFIC_CALLBACK = 'INTERNAL_PROJECT_SPECIFIC_CALLBACK' | ||
379 | PROJECT_SPECIFIC_ISNEW = 'INTERNAL_PROJECT_SPECIFIC_ISNEW' | ||
380 | PROJECT_SPECIFIC_DEFAULTIMAGE = 'PROJECT_SPECIFIC_DEFAULTIMAGE' | ||
381 | PROJECT_SPECIFIC_NONE = '' | ||
382 | PROJECT_SPECIFIC_NEW = '1' | ||
383 | PROJECT_SPECIFIC_EDIT = '2' | ||
384 | PROJECT_SPECIFIC_CLONING = '3' | ||
385 | PROJECT_SPECIFIC_CLONING_SUCCESS = '4' | ||
386 | PROJECT_SPECIFIC_CLONING_FAIL = '5' | ||
387 | |||
388 | def get_variable(self,variable,default_value = ''): | ||
389 | try: | ||
390 | return self.projectvariable_set.get(name=variable).value | ||
391 | except (ProjectVariable.DoesNotExist,IndexError): | ||
392 | return default_value | ||
393 | |||
394 | def set_variable(self,variable,value): | ||
395 | pv,create = ProjectVariable.objects.get_or_create(project = self, name = variable) | ||
396 | pv.value = value | ||
397 | pv.save() | ||
398 | |||
399 | def get_default_image(self): | ||
400 | return self.get_variable(Project.PROJECT_SPECIFIC_DEFAULTIMAGE) | ||
401 | |||
356 | def schedule_build(self): | 402 | def schedule_build(self): |
357 | 403 | ||
358 | from bldcontrol.models import BuildRequest, BRTarget, BRLayer | 404 | from bldcontrol.models import BuildRequest, BRTarget, BRLayer |
@@ -459,6 +505,9 @@ class Build(models.Model): | |||
459 | # number of repos cloned so far for this build (default off) | 505 | # number of repos cloned so far for this build (default off) |
460 | repos_cloned = models.IntegerField(default=1) | 506 | repos_cloned = models.IntegerField(default=1) |
461 | 507 | ||
508 | # Hint on current progress item | ||
509 | progress_item = models.CharField(max_length=40) | ||
510 | |||
462 | @staticmethod | 511 | @staticmethod |
463 | def get_recent(project=None): | 512 | def get_recent(project=None): |
464 | """ | 513 | """ |