diff options
author | David Reyna <David.Reyna@windriver.com> | 2017-06-27 13:44:30 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-06-28 16:02:15 +0100 |
commit | 4f2baebf362d71351db044c0646f9bc6e8a39c49 (patch) | |
tree | bcbb07afbe24816f35d0c9d616ac5ea1fcca7f17 /bitbake/lib/toaster/orm | |
parent | 43aaa802c35ecc9d972f3b9adcd060033de1d9de (diff) | |
download | poky-4f2baebf362d71351db044c0646f9bc6e8a39c49.tar.gz |
bitbake: toaster: Add distro selection support
Add the ability to select a distro in the project page,
based on values from the Layer Index. Add a distro selection
page with the add layer feature, based on the add machine
page.
[YOCTO #10632]
(Bitbake rev: a156a4eff67cdc3943494f5be72b96e3db656250)
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')
-rw-r--r-- | bitbake/lib/toaster/orm/management/commands/lsupdates.py | 19 | ||||
-rw-r--r-- | bitbake/lib/toaster/orm/migrations/0017_distro_clone.py | 25 | ||||
-rw-r--r-- | bitbake/lib/toaster/orm/models.py | 31 |
3 files changed, 75 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/orm/management/commands/lsupdates.py b/bitbake/lib/toaster/orm/management/commands/lsupdates.py index 90f07c9dc5..0b0d4ff8f9 100644 --- a/bitbake/lib/toaster/orm/management/commands/lsupdates.py +++ b/bitbake/lib/toaster/orm/management/commands/lsupdates.py | |||
@@ -23,6 +23,7 @@ from django.core.management.base import BaseCommand | |||
23 | 23 | ||
24 | from orm.models import LayerSource, Layer, Release, Layer_Version | 24 | from orm.models import LayerSource, Layer, Release, Layer_Version |
25 | from orm.models import LayerVersionDependency, Machine, Recipe | 25 | from orm.models import LayerVersionDependency, Machine, Recipe |
26 | from orm.models import Distro | ||
26 | 27 | ||
27 | import os | 28 | import os |
28 | import sys | 29 | import sys |
@@ -249,6 +250,24 @@ class Command(BaseCommand): | |||
249 | depends_on=lvd) | 250 | depends_on=lvd) |
250 | self.mini_progress("Layer version dependencies", i, total) | 251 | self.mini_progress("Layer version dependencies", i, total) |
251 | 252 | ||
253 | # update Distros | ||
254 | logger.info("Fetching distro information") | ||
255 | distros_info = _get_json_response( | ||
256 | apilinks['distros'] + "?filter=layerbranch__branch__name:%s" % | ||
257 | "OR".join(whitelist_branch_names)) | ||
258 | |||
259 | total = len(distros_info) | ||
260 | for i, di in enumerate(distros_info): | ||
261 | distro, created = Distro.objects.get_or_create( | ||
262 | name=di['name'], | ||
263 | layer_version=Layer_Version.objects.get( | ||
264 | pk=li_layer_branch_id_to_toaster_lv_id[di['layerbranch']])) | ||
265 | distro.up_date = di['updated'] | ||
266 | distro.name = di['name'] | ||
267 | distro.description = di['description'] | ||
268 | distro.save() | ||
269 | self.mini_progress("distros", i, total) | ||
270 | |||
252 | # update machines | 271 | # update machines |
253 | logger.info("Fetching machine information") | 272 | logger.info("Fetching machine information") |
254 | machines_info = _get_json_response( | 273 | machines_info = _get_json_response( |
diff --git a/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py b/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py new file mode 100644 index 0000000000..d3c5901275 --- /dev/null +++ b/bitbake/lib/toaster/orm/migrations/0017_distro_clone.py | |||
@@ -0,0 +1,25 @@ | |||
1 | # -*- coding: utf-8 -*- | ||
2 | from __future__ import unicode_literals | ||
3 | |||
4 | from django.db import migrations, models | ||
5 | |||
6 | class Migration(migrations.Migration): | ||
7 | |||
8 | dependencies = [ | ||
9 | ('orm', '0016_clone_progress'), | ||
10 | ] | ||
11 | |||
12 | operations = [ | ||
13 | migrations.CreateModel( | ||
14 | name='Distro', | ||
15 | fields=[ | ||
16 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), | ||
17 | ('up_id', models.IntegerField(default=None, null=True)), | ||
18 | ('up_date', models.DateTimeField(default=None, null=True)), | ||
19 | ('name', models.CharField(max_length=255)), | ||
20 | ('description', models.CharField(max_length=255)), | ||
21 | ('layer_version', models.ForeignKey(to='orm.Layer_Version')), | ||
22 | ], | ||
23 | ), | ||
24 | ] | ||
25 | |||
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 13bd11704a..5c14727a70 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
@@ -321,6 +321,22 @@ class Project(models.Model): | |||
321 | 321 | ||
322 | return queryset | 322 | return queryset |
323 | 323 | ||
324 | def get_available_distros(self): | ||
325 | """ Returns QuerySet of all Distros which are provided by the | ||
326 | Layers currently added to the Project """ | ||
327 | queryset = Distro.objects.filter( | ||
328 | layer_version__in=self.get_project_layer_versions()) | ||
329 | |||
330 | return queryset | ||
331 | |||
332 | def get_all_compatible_distros(self): | ||
333 | """ Returns QuerySet of all the compatible Wind River distros available to the | ||
334 | project including ones from Layers not currently added """ | ||
335 | queryset = Distro.objects.filter( | ||
336 | layer_version__in=self.get_all_compatible_layer_versions()) | ||
337 | |||
338 | return queryset | ||
339 | |||
324 | def get_available_recipes(self): | 340 | def get_available_recipes(self): |
325 | """ Returns QuerySet of all the recipes that are provided by layers | 341 | """ Returns QuerySet of all the recipes that are provided by layers |
326 | added to this project """ | 342 | added to this project """ |
@@ -1795,6 +1811,21 @@ def signal_runbuilds(): | |||
1795 | except FileNotFoundError: | 1811 | except FileNotFoundError: |
1796 | logger.info("Stopping existing runbuilds: no current process found") | 1812 | logger.info("Stopping existing runbuilds: no current process found") |
1797 | 1813 | ||
1814 | class Distro(models.Model): | ||
1815 | search_allowed_fields = ["name", "description", "layer_version__layer__name"] | ||
1816 | up_date = models.DateTimeField(null = True, default = None) | ||
1817 | |||
1818 | layer_version = models.ForeignKey('Layer_Version') | ||
1819 | name = models.CharField(max_length=255) | ||
1820 | description = models.CharField(max_length=255) | ||
1821 | |||
1822 | def get_vcs_distro_file_link_url(self): | ||
1823 | path = self.name+'.conf' | ||
1824 | return self.layer_version.get_vcs_file_link_url(path) | ||
1825 | |||
1826 | def __unicode__(self): | ||
1827 | return "Distro " + self.name + "(" + self.description + ")" | ||
1828 | |||
1798 | django.db.models.signals.post_save.connect(invalidate_cache) | 1829 | django.db.models.signals.post_save.connect(invalidate_cache) |
1799 | django.db.models.signals.post_delete.connect(invalidate_cache) | 1830 | django.db.models.signals.post_delete.connect(invalidate_cache) |
1800 | django.db.models.signals.m2m_changed.connect(invalidate_cache) | 1831 | django.db.models.signals.m2m_changed.connect(invalidate_cache) |