summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/orm/models.py
diff options
context:
space:
mode:
authorDavid Reyna <David.Reyna@windriver.com>2018-08-15 18:04:09 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-08-20 10:20:51 +0100
commit08fbdc02e32d715ae94e3b9603fb3ec8351c8fd3 (patch)
tree8b1eb6531f782ba531903cc7248fbd5705e5adf3 /bitbake/lib/toaster/orm/models.py
parent9af0f1a46bbb6ad9ee8b35957251f4aa826b023f (diff)
downloadpoky-08fbdc02e32d715ae94e3b9603fb3ec8351c8fd3.tar.gz
bitbake: Toaster: Implement the project-specific feature and releated enhancements and defects.
Here is the primary driving enhancement: * Bug 12785 - Support Project Specific configuration for external tools (e.g. ISS, Eclipse) - Isolated project-specific configuration page (full Toaster context hidden) - Support for new project, reconfigure existing project, and import existing command line project - Ability to define variables (e.g. image recipe) and pass them back to external GUI - Ability to execute the cloning phase, so that external GUI receive a buildable project - Ability to call back to the external GUI when updates are completed and ready - Compatibility of above projects with the normal full Toaster interface - Ability to pass to a 'complete' or 'cancel' web page so that the external GUI can immediately stop that Toaster instance, and not leave dangling servers nor edit sessions open Here are the supporting enhancements, where at least the back end is implemented: * Bug 12821 - Make Toaster conf changes compatible with command line usage * Bug 12822 - Support importing user changes to conf files into Toaster * Bug 12823 - Support importing user build directories into Toaster * Bug 12824 - Scan imported layers for content so that they are immediately available * Bug 12825 - show layer clone item in progress bar Here are defects fixed: * Bug 12817 - builddelete.py requires explicit 'add_arguments' * Bug 12818 - Remove orphaned imported layers when project is deleted * Bug 12826 - fix imported layer management * Bug 12819 - build using selected bitbake env, not Toaster's env * Bug 12820 - Toaster randomizes the layer order in toaster_bblayers.conf [YOCTO #12785] (Bitbake rev: 985d6cec290bdd80998a63483561a73c75d82d65) Signed-off-by: David Reyna <David.Reyna@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/orm/models.py')
-rw-r--r--bitbake/lib/toaster/orm/models.py61
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
123class ProjectManager(models.Manager): 123class 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 """