summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/orm
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/orm')
-rw-r--r--bitbake/lib/toaster/orm/fixtures/README2
-rwxr-xr-xbitbake/lib/toaster/orm/fixtures/gen_fixtures.py447
-rw-r--r--bitbake/lib/toaster/orm/fixtures/oe-core.xml48
-rw-r--r--bitbake/lib/toaster/orm/fixtures/poky.xml118
-rw-r--r--bitbake/lib/toaster/orm/fixtures/settings.xml4
-rw-r--r--bitbake/lib/toaster/orm/management/commands/lsupdates.py16
-rw-r--r--bitbake/lib/toaster/orm/migrations/0020_models_bigautofield.py173
-rw-r--r--bitbake/lib/toaster/orm/migrations/0021_eventlogsimports.py22
-rw-r--r--bitbake/lib/toaster/orm/models.py49
9 files changed, 795 insertions, 84 deletions
diff --git a/bitbake/lib/toaster/orm/fixtures/README b/bitbake/lib/toaster/orm/fixtures/README
index 1b1c660aac..7cd745e26b 100644
--- a/bitbake/lib/toaster/orm/fixtures/README
+++ b/bitbake/lib/toaster/orm/fixtures/README
@@ -27,4 +27,4 @@ Data can be provided in XML, JSON and if installed YAML formats.
27 27
28Use the django management command manage.py loaddata <your fixture file> 28Use the django management command manage.py loaddata <your fixture file>
29For further information see the Django command documentation at: 29For further information see the Django command documentation at:
30https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-loaddata 30https://docs.djangoproject.com/en/3.2/ref/django-admin/#django-admin-loaddata
diff --git a/bitbake/lib/toaster/orm/fixtures/gen_fixtures.py b/bitbake/lib/toaster/orm/fixtures/gen_fixtures.py
new file mode 100755
index 0000000000..71afe3914e
--- /dev/null
+++ b/bitbake/lib/toaster/orm/fixtures/gen_fixtures.py
@@ -0,0 +1,447 @@
1#!/usr/bin/env python3
2# ex:ts=4:sw=4:sts=4:et
3# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4#
5# Generate Toaster Fixtures for 'poky.xml' and 'oe-core.xml'
6#
7# Copyright (C) 2022 Wind River Systems
8# SPDX-License-Identifier: GPL-2.0-only
9#
10# Edit the 'current_releases' table for each new release cycle
11#
12# Usage: ./get_fixtures all
13#
14
15import os
16import sys
17import argparse
18
19verbose = False
20
21####################################
22# Releases
23#
24# https://wiki.yoctoproject.org/wiki/Releases
25#
26# NOTE: for the current releases table, it helps to keep continuing releases
27# in the same table positions since this minimizes the patch diff for review.
28# The order of the table does not matter since Toaster presents them sorted.
29#
30# Traditionally, the two most current releases are included in addition to the
31# 'master' branch and the local installation's 'HEAD'.
32# It is also policy to include all active LTS releases.
33#
34
35# [Codename, Yocto Project Version, Release Date, Current Version, Support Level, Poky Version, BitBake branch]
36current_releases = [
37 # Release slot #1
38 ['Kirkstone','4.0','April 2022','4.0.8 (March 2023)','Stable - Long Term Support (until Apr. 2024)','','2.0'],
39 # Release slot #2 'local'
40 ['HEAD','HEAD','','Local Yocto Project','HEAD','','HEAD'],
41 # Release slot #3 'master'
42 ['Master','master','','Yocto Project master','master','','master'],
43 # Release slot #4
44 ['Mickledore','4.2','April 2023','4.2.0 (April 2023)','Support for 7 months (until October 2023)','','2.4'],
45# ['Langdale','4.1','October 2022','4.1.2 (January 2023)','Support for 7 months (until May 2023)','','2.2'],
46# ['Honister','3.4','October 2021','3.4.2 (February 2022)','Support for 7 months (until May 2022)','26.0','1.52'],
47# ['Hardknott','3.3','April 2021','3.3.5 (March 2022)','Stable - Support for 13 months (until Apr. 2022)','25.0','1.50'],
48# ['Gatesgarth','3.2','Oct 2020','3.2.4 (May 2021)','EOL','24.0','1.48'],
49 # Optional Release slot #5
50 ['Dunfell','3.1','April 2020','3.1.23 (February 2023)','Stable - Long Term Support (until Apr. 2024)','23.0','1.46'],
51]
52
53default_poky_layers = [
54 'openembedded-core',
55 'meta-poky',
56 'meta-yocto-bsp',
57]
58
59default_oe_core_layers = [
60 'openembedded-core',
61]
62
63####################################
64# Templates
65
66prolog_template = '''\
67<?xml version="1.0" encoding="utf-8"?>
68<django-objects version="1.0">
69 <!-- Set the project default value for DISTRO -->
70 <object model="orm.toastersetting" pk="1">
71 <field type="CharField" name="name">DEFCONF_DISTRO</field>
72 <field type="CharField" name="value">{{distro}}</field>
73 </object>
74'''
75
76#<!-- Bitbake versions which correspond to the metadata release -->')
77bitbakeversion_poky_template = '''\
78 <object model="orm.bitbakeversion" pk="{{bitbake_id}}">
79 <field type="CharField" name="name">{{name}}</field>
80 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
81 <field type="CharField" name="branch">{{branch}}</field>
82 <field type="CharField" name="dirpath">bitbake</field>
83 </object>
84'''
85bitbakeversion_oecore_template = '''\
86 <object model="orm.bitbakeversion" pk="{{bitbake_id}}">
87 <field type="CharField" name="name">{{name}}</field>
88 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
89 <field type="CharField" name="branch">{{bitbakeversion}}</field>
90 </object>
91'''
92
93# <!-- Releases available -->
94releases_available_template = '''\
95 <object model="orm.release" pk="{{ra_count}}">
96 <field type="CharField" name="name">{{name}}</field>
97 <field type="CharField" name="description">{{description}}</field>
98 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">{{ra_count}}</field>
99 <field type="CharField" name="branch_name">{{release}}</field>
100 <field type="TextField" name="helptext">Toaster will run your builds {{help_source}}.</field>
101 </object>
102'''
103
104# <!-- Default project layers for each release -->
105default_layers_template = '''\
106 <object model="orm.releasedefaultlayer" pk="{{rdl_count}}">
107 <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field>
108 <field type="CharField" name="layer_name">{{layer}}</field>
109 </object>
110'''
111
112default_layers_preface = '''\
113 <!-- Default layers provided by poky
114 openembedded-core
115 meta-poky
116 meta-yocto-bsp
117 -->
118'''
119
120layer_poky_template = '''\
121 <object model="orm.layer" pk="{{layer_id}}">
122 <field type="CharField" name="name">{{layer}}</field>
123 <field type="CharField" name="layer_index_url"></field>
124 <field type="CharField" name="vcs_url">{{vcs_url}}</field>
125 <field type="CharField" name="vcs_web_url">{{vcs_web_url}}</field>
126 <field type="CharField" name="vcs_web_tree_base_url">{{vcs_web_tree_base_url}}</field>
127 <field type="CharField" name="vcs_web_file_base_url">{{vcs_web_file_base_url}}</field>
128 </object>
129'''
130
131layer_oe_core_template = '''\
132 <object model="orm.layer" pk="{{layer_id}}">
133 <field type="CharField" name="name">{{layer}}</field>
134 <field type="CharField" name="vcs_url">{{vcs_url}}</field>
135 <field type="CharField" name="vcs_web_url">{{vcs_web_url}}</field>
136 <field type="CharField" name="vcs_web_tree_base_url">{{vcs_web_tree_base_url}}</field>
137 <field type="CharField" name="vcs_web_file_base_url">{{vcs_web_file_base_url}}</field>
138 </object>
139'''
140
141layer_version_template = '''\
142 <object model="orm.layer_version" pk="{{lv_count}}">
143 <field rel="ManyToOneRel" to="orm.layer" name="layer">{{layer_id}}</field>
144 <field type="IntegerField" name="layer_source">0</field>
145 <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field>
146 <field type="CharField" name="branch">{{branch}}</field>
147 <field type="CharField" name="dirpath">{{dirpath}}</field>
148 </object>
149'''
150
151layer_version_HEAD_template = '''\
152 <object model="orm.layer_version" pk="{{lv_count}}">
153 <field rel="ManyToOneRel" to="orm.layer" name="layer">{{layer_id}}</field>
154 <field type="IntegerField" name="layer_source">0</field>
155 <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field>
156 <field type="CharField" name="branch">{{branch}}</field>
157 <field type="CharField" name="commit">{{commit}}</field>
158 <field type="CharField" name="dirpath">{{dirpath}}</field>
159 </object>
160'''
161
162layer_version_oe_core_template = '''\
163 <object model="orm.layer_version" pk="1">
164 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
165 <field rel="ManyToOneRel" to="orm.release" name="release">2</field>
166 <field type="CharField" name="local_path">OE-CORE-LAYER-DIR</field>
167 <field type="CharField" name="branch">HEAD</field>
168 <field type="CharField" name="dirpath">meta</field>
169 <field type="IntegerField" name="layer_source">0</field>
170 </object>
171'''
172
173epilog_template = '''\
174</django-objects>
175'''
176
177#################################
178# Helper Routines
179#
180
181def print_str(str,fd):
182 # Avoid extra newline at end
183 if str and (str[-1] == '\n'):
184 str = str[0:-1]
185 print(str,file=fd)
186
187def print_template(template,params,fd):
188 for line in template.split('\n'):
189 p = line.find('{{')
190 while p > 0:
191 q = line.find('}}')
192 key = line[p+2:q]
193 if key in params:
194 line = line[0:p] + params[key] + line[q+2:]
195 else:
196 line = line[0:p] + '?' + key + '?' + line[q+2:]
197 p = line.find('{{')
198 if line:
199 print(line,file=fd)
200
201#################################
202# Generate poky.xml
203#
204
205def generate_poky():
206 fd = open('poky.xml','w')
207
208 params = {}
209 params['distro'] = 'poky'
210 print_template(prolog_template,params,fd)
211 print_str('',fd)
212
213 print_str(' <!-- Bitbake versions which correspond to the metadata release -->',fd)
214 for i,release in enumerate(current_releases):
215 params = {}
216 params['release'] = release[0]
217 params['Release'] = release[0]
218 params['release_version'] = release[1]
219 if not (params['release'] in ('HEAD')): # 'master',
220 params['release'] = params['release'][0].lower() + params['release'][1:]
221 params['name'] = params['release']
222 params['bitbake_id'] = str(i+1)
223 params['branch'] = params['release']
224 print_template(bitbakeversion_poky_template,params,fd)
225 print_str('',fd)
226
227 print_str('',fd)
228 print_str(' <!-- Releases available -->',fd)
229 for i,release in enumerate(current_releases):
230 params = {}
231 params['release'] = release[0]
232 params['Release'] = release[0]
233 params['release_version'] = release[1]
234 if not (params['release'] in ('HEAD')): #'master',
235 params['release'] = params['release'][0].lower() + params['release'][1:]
236 params['h_release'] = '?h={{release}}'
237 params['name'] = params['release']
238 params['ra_count'] = str(i+1)
239 params['branch'] = params['release']
240
241 if 'HEAD' == params['release']:
242 params['help_source'] = 'with the version of the Yocto Project you have cloned or downloaded to your computer'
243 params['description'] = 'Local Yocto Project'
244 params['name'] = 'local'
245 else:
246 params['help_source'] = 'using the tip of the &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/{{h_release}}"&gt;Yocto Project {{Release}} branch&lt;/a&gt;'
247 params['description'] = 'Yocto Project {{release_version}} "{{Release}}"'
248 if 'master' == params['release']:
249 params['h_release'] = ''
250 params['description'] = 'Yocto Project master'
251
252 print_template(releases_available_template,params,fd)
253 print_str('',fd)
254
255 print_str(' <!-- Default project layers for each release -->',fd)
256 rdl_count = 1
257 for i,release in enumerate(current_releases):
258 for j,layer in enumerate(default_poky_layers):
259 params = {}
260 params['layer'] = layer
261 params['release'] = release[0]
262 params['Release'] = release[0]
263 params['release_version'] = release[1]
264 if not (params['release'] in ('master','HEAD')):
265 params['release'] = params['release'][0].lower() + params['release'][1:]
266 params['release_id'] = str(i+1)
267 params['rdl_count'] = str(rdl_count)
268 params['branch'] = params['release']
269 print_template(default_layers_template,params,fd)
270 rdl_count += 1
271 print_str('',fd)
272
273 print_str(default_layers_preface,fd)
274 lv_count = 1
275 for i,layer in enumerate(default_poky_layers):
276 params = {}
277 params['layer'] = layer
278 params['layer_id'] = str(i+1)
279 params['vcs_url'] = 'git://git.yoctoproject.org/poky'
280 params['vcs_web_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky'
281 params['vcs_web_tree_base_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%'
282 params['vcs_web_file_base_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%'
283
284 if i:
285 print_str('',fd)
286 print_template(layer_poky_template,params,fd)
287 for j,release in enumerate(current_releases):
288 params['release'] = release[0]
289 params['Release'] = release[0]
290 params['release_version'] = release[1]
291 if not (params['release'] in ('master','HEAD')):
292 params['release'] = params['release'][0].lower() + params['release'][1:]
293 params['release_id'] = str(j+1)
294 params['lv_count'] = str(lv_count)
295 params['branch'] = params['release']
296 params['commit'] = params['release']
297
298 params['dirpath'] = params['layer']
299 if params['layer'] in ('openembedded-core'): #'openembedded-core',
300 params['dirpath'] = 'meta'
301
302 if 'HEAD' == params['release']:
303 print_template(layer_version_HEAD_template,params,fd)
304 else:
305 print_template(layer_version_template,params,fd)
306 lv_count += 1
307
308 print_str(epilog_template,fd)
309 fd.close()
310
311#################################
312# Generate oe-core.xml
313#
314
315def generate_oe_core():
316 fd = open('oe-core.xml','w')
317
318 params = {}
319 params['distro'] = 'nodistro'
320 print_template(prolog_template,params,fd)
321 print_str('',fd)
322
323 print_str(' <!-- Bitbake versions which correspond to the metadata release -->',fd)
324 for i,release in enumerate(current_releases):
325 params = {}
326 params['release'] = release[0]
327 params['Release'] = release[0]
328 params['bitbakeversion'] = release[6]
329 params['release_version'] = release[1]
330 if not (params['release'] in ('HEAD')): # 'master',
331 params['release'] = params['release'][0].lower() + params['release'][1:]
332 params['name'] = params['release']
333 params['bitbake_id'] = str(i+1)
334 params['branch'] = params['release']
335 print_template(bitbakeversion_oecore_template,params,fd)
336 print_str('',fd)
337
338 print_str(' <!-- Releases available -->',fd)
339 for i,release in enumerate(current_releases):
340 params = {}
341 params['release'] = release[0]
342 params['Release'] = release[0]
343 params['release_version'] = release[1]
344 if not (params['release'] in ('HEAD')): #'master',
345 params['release'] = params['release'][0].lower() + params['release'][1:]
346 params['h_release'] = '?h={{release}}'
347 params['name'] = params['release']
348 params['ra_count'] = str(i+1)
349 params['branch'] = params['release']
350
351 if 'HEAD' == params['release']:
352 params['help_source'] = 'with the version of OpenEmbedded that you have cloned or downloaded to your computer'
353 params['description'] = 'Local Openembedded'
354 params['name'] = 'local'
355 else:
356 params['help_source'] = 'using the tip of the &lt;a href=\\"https://cgit.openembedded.org/openembedded-core/log/{{h_release}}\\"&gt;OpenEmbedded {{Release}}&lt;/a&gt; branch'
357 params['description'] = 'Openembedded {{Release}}'
358 if 'master' == params['release']:
359 params['h_release'] = ''
360 params['description'] = 'OpenEmbedded core master'
361 params['Release'] = params['release']
362
363 print_template(releases_available_template,params,fd)
364 print_str('',fd)
365
366 print_str(' <!-- Default layers for each release -->',fd)
367 rdl_count = 1
368 for i,release in enumerate(current_releases):
369 for j,layer in enumerate(default_oe_core_layers):
370 params = {}
371 params['layer'] = layer
372 params['release'] = release[0]
373 params['Release'] = release[0]
374 params['release_version'] = release[1]
375 if not (params['release'] in ('master','HEAD')):
376 params['release'] = params['release'][0].lower() + params['release'][1:]
377 params['release_id'] = str(i+1)
378 params['rdl_count'] = str(rdl_count)
379 params['branch'] = params['release']
380 print_template(default_layers_template,params,fd)
381 rdl_count += 1
382 print_str('',fd)
383
384 print_str('',fd)
385 print_str(' <!-- Layer for the Local release -->',fd)
386 lv_count = 1
387 for i,layer in enumerate(default_oe_core_layers):
388 params = {}
389 params['layer'] = layer
390 params['layer_id'] = str(i+1)
391 params['vcs_url'] = 'git://git.openembedded.org/openembedded-core'
392 params['vcs_web_url'] = 'https://cgit.openembedded.org/openembedded-core'
393 params['vcs_web_tree_base_url'] = 'https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%'
394 params['vcs_web_file_base_url'] = 'https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%'
395 if i:
396 print_str('',fd)
397 print_template(layer_oe_core_template,params,fd)
398
399 print_template(layer_version_oe_core_template,params,fd)
400 print_str('',fd)
401
402 print_str(epilog_template,fd)
403 fd.close()
404
405#################################
406# Help
407#
408
409def list_releases():
410 print("Release ReleaseVer BitbakeVer Support Level")
411 print("========== =========== ========== ==============================================")
412 for release in current_releases:
413 print("%10s %10s %11s %s" % (release[0],release[1],release[6],release[4]))
414
415#################################
416# main
417#
418
419def main(argv):
420 global verbose
421
422 parser = argparse.ArgumentParser(description='gen_fixtures.py: table generate the fixture files')
423 parser.add_argument('--poky', '-p', action='store_const', const='poky', dest='command', help='Generate the poky.xml file')
424 parser.add_argument('--oe-core', '-o', action='store_const', const='oe_core', dest='command', help='Generate the oe-core.xml file')
425 parser.add_argument('--all', '-a', action='store_const', const='all', dest='command', help='Generate all fixture files')
426 parser.add_argument('--list', '-l', action='store_const', const='list', dest='command', help='List the release table')
427 parser.add_argument('--verbose', '-v', action='store_true', dest='verbose', help='Enable verbose debugging output')
428 args = parser.parse_args()
429
430 verbose = args.verbose
431 if 'poky' == args.command:
432 generate_poky()
433 elif 'oe_core' == args.command:
434 generate_oe_core()
435 elif 'all' == args.command:
436 generate_poky()
437 generate_oe_core()
438 elif 'all' == args.command:
439 list_releases()
440 elif 'list' == args.command:
441 list_releases()
442
443 else:
444 print("No command for 'gen_fixtures.py' selected")
445
446if __name__ == '__main__':
447 main(sys.argv[1:])
diff --git a/bitbake/lib/toaster/orm/fixtures/oe-core.xml b/bitbake/lib/toaster/orm/fixtures/oe-core.xml
index 026d94869a..950f2a98af 100644
--- a/bitbake/lib/toaster/orm/fixtures/oe-core.xml
+++ b/bitbake/lib/toaster/orm/fixtures/oe-core.xml
@@ -8,9 +8,9 @@
8 8
9 <!-- Bitbake versions which correspond to the metadata release --> 9 <!-- Bitbake versions which correspond to the metadata release -->
10 <object model="orm.bitbakeversion" pk="1"> 10 <object model="orm.bitbakeversion" pk="1">
11 <field type="CharField" name="name">dunfell</field> 11 <field type="CharField" name="name">kirkstone</field>
12 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> 12 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
13 <field type="CharField" name="branch">1.46</field> 13 <field type="CharField" name="branch">2.0</field>
14 </object> 14 </object>
15 <object model="orm.bitbakeversion" pk="2"> 15 <object model="orm.bitbakeversion" pk="2">
16 <field type="CharField" name="name">HEAD</field> 16 <field type="CharField" name="name">HEAD</field>
@@ -23,18 +23,23 @@
23 <field type="CharField" name="branch">master</field> 23 <field type="CharField" name="branch">master</field>
24 </object> 24 </object>
25 <object model="orm.bitbakeversion" pk="4"> 25 <object model="orm.bitbakeversion" pk="4">
26 <field type="CharField" name="name">gatesgarth</field> 26 <field type="CharField" name="name">mickledore</field>
27 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
28 <field type="CharField" name="branch">2.4</field>
29 </object>
30 <object model="orm.bitbakeversion" pk="5">
31 <field type="CharField" name="name">dunfell</field>
27 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> 32 <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
28 <field type="CharField" name="branch">1.48</field> 33 <field type="CharField" name="branch">1.46</field>
29 </object> 34 </object>
30 35
31 <!-- Releases available --> 36 <!-- Releases available -->
32 <object model="orm.release" pk="1"> 37 <object model="orm.release" pk="1">
33 <field type="CharField" name="name">dunfell</field> 38 <field type="CharField" name="name">kirkstone</field>
34 <field type="CharField" name="description">Openembedded Dunfell</field> 39 <field type="CharField" name="description">Openembedded Kirkstone</field>
35 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field> 40 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
36 <field type="CharField" name="branch_name">dunfell</field> 41 <field type="CharField" name="branch_name">kirkstone</field>
37 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=dunfell\"&gt;OpenEmbedded Dunfell&lt;/a&gt; branch.</field> 42 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=kirkstone\"&gt;OpenEmbedded Kirkstone&lt;/a&gt; branch.</field>
38 </object> 43 </object>
39 <object model="orm.release" pk="2"> 44 <object model="orm.release" pk="2">
40 <field type="CharField" name="name">local</field> 45 <field type="CharField" name="name">local</field>
@@ -48,14 +53,21 @@
48 <field type="CharField" name="description">OpenEmbedded core master</field> 53 <field type="CharField" name="description">OpenEmbedded core master</field>
49 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field> 54 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field>
50 <field type="CharField" name="branch_name">master</field> 55 <field type="CharField" name="branch_name">master</field>
51 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/\"&gt;OpenEmbedded master&lt;/a&gt; branch.</field> 56 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/\"&gt;OpenEmbedded master&lt;/a&gt; branch.</field>
52 </object> 57 </object>
53 <object model="orm.release" pk="4"> 58 <object model="orm.release" pk="4">
54 <field type="CharField" name="name">gatesgarth</field> 59 <field type="CharField" name="name">mickledore</field>
55 <field type="CharField" name="description">Openembedded Gatesgarth</field> 60 <field type="CharField" name="description">Openembedded Mickledore</field>
56 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field> 61 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
57 <field type="CharField" name="branch_name">gatesgarth</field> 62 <field type="CharField" name="branch_name">mickledore</field>
58 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=gatesgarth\"&gt;OpenEmbedded Gatesgarth&lt;/a&gt; branch.</field> 63 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=mickledore\"&gt;OpenEmbedded Mickledore&lt;/a&gt; branch.</field>
64 </object>
65 <object model="orm.release" pk="5">
66 <field type="CharField" name="name">dunfell</field>
67 <field type="CharField" name="description">Openembedded Dunfell</field>
68 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
69 <field type="CharField" name="branch_name">dunfell</field>
70 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=dunfell\"&gt;OpenEmbedded Dunfell&lt;/a&gt; branch.</field>
59 </object> 71 </object>
60 72
61 <!-- Default layers for each release --> 73 <!-- Default layers for each release -->
@@ -75,15 +87,19 @@
75 <field rel="ManyToOneRel" to="orm.release" name="release">4</field> 87 <field rel="ManyToOneRel" to="orm.release" name="release">4</field>
76 <field type="CharField" name="layer_name">openembedded-core</field> 88 <field type="CharField" name="layer_name">openembedded-core</field>
77 </object> 89 </object>
90 <object model="orm.releasedefaultlayer" pk="5">
91 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
92 <field type="CharField" name="layer_name">openembedded-core</field>
93 </object>
78 94
79 95
80 <!-- Layer for the Local release --> 96 <!-- Layer for the Local release -->
81 <object model="orm.layer" pk="1"> 97 <object model="orm.layer" pk="1">
82 <field type="CharField" name="name">openembedded-core</field> 98 <field type="CharField" name="name">openembedded-core</field>
83 <field type="CharField" name="vcs_url">git://git.openembedded.org/openembedded-core</field> 99 <field type="CharField" name="vcs_url">git://git.openembedded.org/openembedded-core</field>
84 <field type="CharField" name="vcs_web_url">http://cgit.openembedded.org/openembedded-core</field> 100 <field type="CharField" name="vcs_web_url">https://cgit.openembedded.org/openembedded-core</field>
85 <field type="CharField" name="vcs_web_tree_base_url">http://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> 101 <field type="CharField" name="vcs_web_tree_base_url">https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field>
86 <field type="CharField" name="vcs_web_file_base_url">http://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> 102 <field type="CharField" name="vcs_web_file_base_url">https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field>
87 </object> 103 </object>
88 <object model="orm.layer_version" pk="1"> 104 <object model="orm.layer_version" pk="1">
89 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> 105 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
diff --git a/bitbake/lib/toaster/orm/fixtures/poky.xml b/bitbake/lib/toaster/orm/fixtures/poky.xml
index a468a54c49..121e52fd45 100644
--- a/bitbake/lib/toaster/orm/fixtures/poky.xml
+++ b/bitbake/lib/toaster/orm/fixtures/poky.xml
@@ -8,9 +8,9 @@
8 8
9 <!-- Bitbake versions which correspond to the metadata release --> 9 <!-- Bitbake versions which correspond to the metadata release -->
10 <object model="orm.bitbakeversion" pk="1"> 10 <object model="orm.bitbakeversion" pk="1">
11 <field type="CharField" name="name">dunfell</field> 11 <field type="CharField" name="name">kirkstone</field>
12 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> 12 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
13 <field type="CharField" name="branch">dunfell</field> 13 <field type="CharField" name="branch">kirkstone</field>
14 <field type="CharField" name="dirpath">bitbake</field> 14 <field type="CharField" name="dirpath">bitbake</field>
15 </object> 15 </object>
16 <object model="orm.bitbakeversion" pk="2"> 16 <object model="orm.bitbakeversion" pk="2">
@@ -26,20 +26,26 @@
26 <field type="CharField" name="dirpath">bitbake</field> 26 <field type="CharField" name="dirpath">bitbake</field>
27 </object> 27 </object>
28 <object model="orm.bitbakeversion" pk="4"> 28 <object model="orm.bitbakeversion" pk="4">
29 <field type="CharField" name="name">gatesgarth</field> 29 <field type="CharField" name="name">mickledore</field>
30 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> 30 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
31 <field type="CharField" name="branch">gatesgarth</field> 31 <field type="CharField" name="branch">mickledore</field>
32 <field type="CharField" name="dirpath">bitbake</field>
33 </object>
34 <object model="orm.bitbakeversion" pk="5">
35 <field type="CharField" name="name">dunfell</field>
36 <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
37 <field type="CharField" name="branch">dunfell</field>
32 <field type="CharField" name="dirpath">bitbake</field> 38 <field type="CharField" name="dirpath">bitbake</field>
33 </object> 39 </object>
34 40
35 41
36 <!-- Releases available --> 42 <!-- Releases available -->
37 <object model="orm.release" pk="1"> 43 <object model="orm.release" pk="1">
38 <field type="CharField" name="name">dunfell</field> 44 <field type="CharField" name="name">kirkstone</field>
39 <field type="CharField" name="description">Yocto Project 3.1 "Dunfell"</field> 45 <field type="CharField" name="description">Yocto Project 4.0 "Kirkstone"</field>
40 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field> 46 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
41 <field type="CharField" name="branch_name">dunfell</field> 47 <field type="CharField" name="branch_name">kirkstone</field>
42 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell"&gt;Yocto Project Dunfell branch&lt;/a&gt;.</field> 48 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=kirkstone"&gt;Yocto Project Kirkstone branch&lt;/a&gt;.</field>
43 </object> 49 </object>
44 <object model="orm.release" pk="2"> 50 <object model="orm.release" pk="2">
45 <field type="CharField" name="name">local</field> 51 <field type="CharField" name="name">local</field>
@@ -53,14 +59,21 @@
53 <field type="CharField" name="description">Yocto Project master</field> 59 <field type="CharField" name="description">Yocto Project master</field>
54 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field> 60 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field>
55 <field type="CharField" name="branch_name">master</field> 61 <field type="CharField" name="branch_name">master</field>
56 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/"&gt;Yocto Project Master branch&lt;/a&gt;.</field> 62 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/"&gt;Yocto Project Master branch&lt;/a&gt;.</field>
57 </object> 63 </object>
58 <object model="orm.release" pk="4"> 64 <object model="orm.release" pk="4">
59 <field type="CharField" name="name">gatesgarth</field> 65 <field type="CharField" name="name">mickledore</field>
60 <field type="CharField" name="description">Yocto Project 3.2 "Gatesgarth"</field> 66 <field type="CharField" name="description">Yocto Project 4.2 "Mickledore"</field>
61 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field> 67 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field>
62 <field type="CharField" name="branch_name">gatesgarth</field> 68 <field type="CharField" name="branch_name">mickledore</field>
63 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=gatesgarth"&gt;Yocto Project Gatesgarth branch&lt;/a&gt;.</field> 69 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=mickledore"&gt;Yocto Project Mickledore branch&lt;/a&gt;.</field>
70 </object>
71 <object model="orm.release" pk="5">
72 <field type="CharField" name="name">dunfell</field>
73 <field type="CharField" name="description">Yocto Project 3.1 "Dunfell"</field>
74 <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field>
75 <field type="CharField" name="branch_name">dunfell</field>
76 <field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell"&gt;Yocto Project Dunfell branch&lt;/a&gt;.</field>
64 </object> 77 </object>
65 78
66 <!-- Default project layers for each release --> 79 <!-- Default project layers for each release -->
@@ -112,6 +125,18 @@
112 <field rel="ManyToOneRel" to="orm.release" name="release">4</field> 125 <field rel="ManyToOneRel" to="orm.release" name="release">4</field>
113 <field type="CharField" name="layer_name">meta-yocto-bsp</field> 126 <field type="CharField" name="layer_name">meta-yocto-bsp</field>
114 </object> 127 </object>
128 <object model="orm.releasedefaultlayer" pk="13">
129 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
130 <field type="CharField" name="layer_name">openembedded-core</field>
131 </object>
132 <object model="orm.releasedefaultlayer" pk="14">
133 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
134 <field type="CharField" name="layer_name">meta-poky</field>
135 </object>
136 <object model="orm.releasedefaultlayer" pk="15">
137 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
138 <field type="CharField" name="layer_name">meta-yocto-bsp</field>
139 </object>
115 140
116 <!-- Default layers provided by poky 141 <!-- Default layers provided by poky
117 openembedded-core 142 openembedded-core
@@ -122,15 +147,15 @@
122 <field type="CharField" name="name">openembedded-core</field> 147 <field type="CharField" name="name">openembedded-core</field>
123 <field type="CharField" name="layer_index_url"></field> 148 <field type="CharField" name="layer_index_url"></field>
124 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> 149 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field>
125 <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> 150 <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field>
126 <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 151 <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
127 <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 152 <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
128 </object> 153 </object>
129 <object model="orm.layer_version" pk="1"> 154 <object model="orm.layer_version" pk="1">
130 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> 155 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
131 <field type="IntegerField" name="layer_source">0</field> 156 <field type="IntegerField" name="layer_source">0</field>
132 <field rel="ManyToOneRel" to="orm.release" name="release">1</field> 157 <field rel="ManyToOneRel" to="orm.release" name="release">1</field>
133 <field type="CharField" name="branch">dunfell</field> 158 <field type="CharField" name="branch">kirkstone</field>
134 <field type="CharField" name="dirpath">meta</field> 159 <field type="CharField" name="dirpath">meta</field>
135 </object> 160 </object>
136 <object model="orm.layer_version" pk="2"> 161 <object model="orm.layer_version" pk="2">
@@ -152,7 +177,14 @@
152 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> 177 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
153 <field type="IntegerField" name="layer_source">0</field> 178 <field type="IntegerField" name="layer_source">0</field>
154 <field rel="ManyToOneRel" to="orm.release" name="release">4</field> 179 <field rel="ManyToOneRel" to="orm.release" name="release">4</field>
155 <field type="CharField" name="branch">gatesgarth</field> 180 <field type="CharField" name="branch">mickledore</field>
181 <field type="CharField" name="dirpath">meta</field>
182 </object>
183 <object model="orm.layer_version" pk="5">
184 <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
185 <field type="IntegerField" name="layer_source">0</field>
186 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
187 <field type="CharField" name="branch">dunfell</field>
156 <field type="CharField" name="dirpath">meta</field> 188 <field type="CharField" name="dirpath">meta</field>
157 </object> 189 </object>
158 190
@@ -160,18 +192,18 @@
160 <field type="CharField" name="name">meta-poky</field> 192 <field type="CharField" name="name">meta-poky</field>
161 <field type="CharField" name="layer_index_url"></field> 193 <field type="CharField" name="layer_index_url"></field>
162 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> 194 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field>
163 <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> 195 <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field>
164 <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 196 <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
165 <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 197 <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
166 </object> 198 </object>
167 <object model="orm.layer_version" pk="5"> 199 <object model="orm.layer_version" pk="6">
168 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> 200 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
169 <field type="IntegerField" name="layer_source">0</field> 201 <field type="IntegerField" name="layer_source">0</field>
170 <field rel="ManyToOneRel" to="orm.release" name="release">1</field> 202 <field rel="ManyToOneRel" to="orm.release" name="release">1</field>
171 <field type="CharField" name="branch">dunfell</field> 203 <field type="CharField" name="branch">kirkstone</field>
172 <field type="CharField" name="dirpath">meta-poky</field> 204 <field type="CharField" name="dirpath">meta-poky</field>
173 </object> 205 </object>
174 <object model="orm.layer_version" pk="6"> 206 <object model="orm.layer_version" pk="7">
175 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> 207 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
176 <field type="IntegerField" name="layer_source">0</field> 208 <field type="IntegerField" name="layer_source">0</field>
177 <field rel="ManyToOneRel" to="orm.release" name="release">2</field> 209 <field rel="ManyToOneRel" to="orm.release" name="release">2</field>
@@ -179,18 +211,25 @@
179 <field type="CharField" name="commit">HEAD</field> 211 <field type="CharField" name="commit">HEAD</field>
180 <field type="CharField" name="dirpath">meta-poky</field> 212 <field type="CharField" name="dirpath">meta-poky</field>
181 </object> 213 </object>
182 <object model="orm.layer_version" pk="7"> 214 <object model="orm.layer_version" pk="8">
183 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> 215 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
184 <field type="IntegerField" name="layer_source">0</field> 216 <field type="IntegerField" name="layer_source">0</field>
185 <field rel="ManyToOneRel" to="orm.release" name="release">3</field> 217 <field rel="ManyToOneRel" to="orm.release" name="release">3</field>
186 <field type="CharField" name="branch">master</field> 218 <field type="CharField" name="branch">master</field>
187 <field type="CharField" name="dirpath">meta-poky</field> 219 <field type="CharField" name="dirpath">meta-poky</field>
188 </object> 220 </object>
189 <object model="orm.layer_version" pk="8"> 221 <object model="orm.layer_version" pk="9">
190 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> 222 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
191 <field type="IntegerField" name="layer_source">0</field> 223 <field type="IntegerField" name="layer_source">0</field>
192 <field rel="ManyToOneRel" to="orm.release" name="release">4</field> 224 <field rel="ManyToOneRel" to="orm.release" name="release">4</field>
193 <field type="CharField" name="branch">gatesgarth</field> 225 <field type="CharField" name="branch">mickledore</field>
226 <field type="CharField" name="dirpath">meta-poky</field>
227 </object>
228 <object model="orm.layer_version" pk="10">
229 <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
230 <field type="IntegerField" name="layer_source">0</field>
231 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
232 <field type="CharField" name="branch">dunfell</field>
194 <field type="CharField" name="dirpath">meta-poky</field> 233 <field type="CharField" name="dirpath">meta-poky</field>
195 </object> 234 </object>
196 235
@@ -198,18 +237,18 @@
198 <field type="CharField" name="name">meta-yocto-bsp</field> 237 <field type="CharField" name="name">meta-yocto-bsp</field>
199 <field type="CharField" name="layer_index_url"></field> 238 <field type="CharField" name="layer_index_url"></field>
200 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> 239 <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field>
201 <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> 240 <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field>
202 <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 241 <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
203 <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> 242 <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
204 </object> 243 </object>
205 <object model="orm.layer_version" pk="9"> 244 <object model="orm.layer_version" pk="11">
206 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> 245 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
207 <field type="IntegerField" name="layer_source">0</field> 246 <field type="IntegerField" name="layer_source">0</field>
208 <field rel="ManyToOneRel" to="orm.release" name="release">1</field> 247 <field rel="ManyToOneRel" to="orm.release" name="release">1</field>
209 <field type="CharField" name="branch">dunfell</field> 248 <field type="CharField" name="branch">kirkstone</field>
210 <field type="CharField" name="dirpath">meta-yocto-bsp</field> 249 <field type="CharField" name="dirpath">meta-yocto-bsp</field>
211 </object> 250 </object>
212 <object model="orm.layer_version" pk="10"> 251 <object model="orm.layer_version" pk="12">
213 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> 252 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
214 <field type="IntegerField" name="layer_source">0</field> 253 <field type="IntegerField" name="layer_source">0</field>
215 <field rel="ManyToOneRel" to="orm.release" name="release">2</field> 254 <field rel="ManyToOneRel" to="orm.release" name="release">2</field>
@@ -217,18 +256,25 @@
217 <field type="CharField" name="commit">HEAD</field> 256 <field type="CharField" name="commit">HEAD</field>
218 <field type="CharField" name="dirpath">meta-yocto-bsp</field> 257 <field type="CharField" name="dirpath">meta-yocto-bsp</field>
219 </object> 258 </object>
220 <object model="orm.layer_version" pk="11"> 259 <object model="orm.layer_version" pk="13">
221 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> 260 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
222 <field type="IntegerField" name="layer_source">0</field> 261 <field type="IntegerField" name="layer_source">0</field>
223 <field rel="ManyToOneRel" to="orm.release" name="release">3</field> 262 <field rel="ManyToOneRel" to="orm.release" name="release">3</field>
224 <field type="CharField" name="branch">master</field> 263 <field type="CharField" name="branch">master</field>
225 <field type="CharField" name="dirpath">meta-yocto-bsp</field> 264 <field type="CharField" name="dirpath">meta-yocto-bsp</field>
226 </object> 265 </object>
227 <object model="orm.layer_version" pk="12"> 266 <object model="orm.layer_version" pk="14">
228 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> 267 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
229 <field type="IntegerField" name="layer_source">0</field> 268 <field type="IntegerField" name="layer_source">0</field>
230 <field rel="ManyToOneRel" to="orm.release" name="release">4</field> 269 <field rel="ManyToOneRel" to="orm.release" name="release">4</field>
231 <field type="CharField" name="branch">gatesgarth</field> 270 <field type="CharField" name="branch">mickledore</field>
271 <field type="CharField" name="dirpath">meta-yocto-bsp</field>
272 </object>
273 <object model="orm.layer_version" pk="15">
274 <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
275 <field type="IntegerField" name="layer_source">0</field>
276 <field rel="ManyToOneRel" to="orm.release" name="release">5</field>
277 <field type="CharField" name="branch">dunfell</field>
232 <field type="CharField" name="dirpath">meta-yocto-bsp</field> 278 <field type="CharField" name="dirpath">meta-yocto-bsp</field>
233 </object> 279 </object>
234</django-objects> 280</django-objects>
diff --git a/bitbake/lib/toaster/orm/fixtures/settings.xml b/bitbake/lib/toaster/orm/fixtures/settings.xml
index 78c0fdca7f..02c26a6974 100644
--- a/bitbake/lib/toaster/orm/fixtures/settings.xml
+++ b/bitbake/lib/toaster/orm/fixtures/settings.xml
@@ -12,14 +12,14 @@
12 </object> 12 </object>
13 <object model="orm.toastersetting" pk="4"> 13 <object model="orm.toastersetting" pk="4">
14 <field type="CharField" name="name">DEFCONF_MACHINE</field> 14 <field type="CharField" name="name">DEFCONF_MACHINE</field>
15 <field type="CharField" name="value">qemux86</field> 15 <field type="CharField" name="value">qemux86-64</field>
16 </object> 16 </object>
17 <object model="orm.toastersetting" pk="5"> 17 <object model="orm.toastersetting" pk="5">
18 <field type="CharField" name="name">DEFCONF_SSTATE_DIR</field> 18 <field type="CharField" name="name">DEFCONF_SSTATE_DIR</field>
19 <field type="CharField" name="value">${TOPDIR}/../sstate-cache</field> 19 <field type="CharField" name="value">${TOPDIR}/../sstate-cache</field>
20 </object> 20 </object>
21 <object model="orm.toastersetting" pk="6"> 21 <object model="orm.toastersetting" pk="6">
22 <field type="CharField" name="name">DEFCONF_IMAGE_INSTALL_append</field> 22 <field type="CharField" name="name">DEFCONF_IMAGE_INSTALL:append</field>
23 <field type="CharField" name="value"></field> 23 <field type="CharField" name="value"></field>
24 </object> 24 </object>
25 <object model="orm.toastersetting" pk="7"> 25 <object model="orm.toastersetting" pk="7">
diff --git a/bitbake/lib/toaster/orm/management/commands/lsupdates.py b/bitbake/lib/toaster/orm/management/commands/lsupdates.py
index 2fbd7be3d2..6d64830ebd 100644
--- a/bitbake/lib/toaster/orm/management/commands/lsupdates.py
+++ b/bitbake/lib/toaster/orm/management/commands/lsupdates.py
@@ -21,7 +21,7 @@ import threading
21import time 21import time
22logger = logging.getLogger("toaster") 22logger = logging.getLogger("toaster")
23 23
24DEFAULT_LAYERINDEX_SERVER = "http://layers.openembedded.org/layerindex/api/" 24DEFAULT_LAYERINDEX_SERVER = "https://layers.openembedded.org/layerindex/api/"
25 25
26# Add path to bitbake modules for layerindexlib 26# Add path to bitbake modules for layerindexlib
27# lib/toaster/orm/management/commands/lsupdates.py (abspath) 27# lib/toaster/orm/management/commands/lsupdates.py (abspath)
@@ -40,7 +40,7 @@ class Spinner(threading.Thread):
40 """ A simple progress spinner to indicate download/parsing is happening""" 40 """ A simple progress spinner to indicate download/parsing is happening"""
41 def __init__(self, *args, **kwargs): 41 def __init__(self, *args, **kwargs):
42 super(Spinner, self).__init__(*args, **kwargs) 42 super(Spinner, self).__init__(*args, **kwargs)
43 self.setDaemon(True) 43 self.daemon = True
44 self.signal = True 44 self.signal = True
45 45
46 def run(self): 46 def run(self):
@@ -87,13 +87,13 @@ class Command(BaseCommand):
87 87
88 # update branches; only those that we already have names listed in the 88 # update branches; only those that we already have names listed in the
89 # Releases table 89 # Releases table
90 whitelist_branch_names = [rel.branch_name 90 allowed_branch_names = [rel.branch_name
91 for rel in Release.objects.all()] 91 for rel in Release.objects.all()]
92 if len(whitelist_branch_names) == 0: 92 if len(allowed_branch_names) == 0:
93 raise Exception("Failed to make list of branches to fetch") 93 raise Exception("Failed to make list of branches to fetch")
94 94
95 logger.info("Fetching metadata for %s", 95 logger.info("Fetching metadata for %s",
96 " ".join(whitelist_branch_names)) 96 " ".join(allowed_branch_names))
97 97
98 # We require a non-empty bb.data, but we can fake it with a dictionary 98 # We require a non-empty bb.data, but we can fake it with a dictionary
99 layerindex = layerindexlib.LayerIndex({"DUMMY" : "VALUE"}) 99 layerindex = layerindexlib.LayerIndex({"DUMMY" : "VALUE"})
@@ -101,8 +101,8 @@ class Command(BaseCommand):
101 http_progress = Spinner() 101 http_progress = Spinner()
102 http_progress.start() 102 http_progress.start()
103 103
104 if whitelist_branch_names: 104 if allowed_branch_names:
105 url_branches = ";branch=%s" % ','.join(whitelist_branch_names) 105 url_branches = ";branch=%s" % ','.join(allowed_branch_names)
106 else: 106 else:
107 url_branches = "" 107 url_branches = ""
108 layerindex.load_layerindex("%s%s" % (self.apiurl, url_branches)) 108 layerindex.load_layerindex("%s%s" % (self.apiurl, url_branches))
diff --git a/bitbake/lib/toaster/orm/migrations/0020_models_bigautofield.py b/bitbake/lib/toaster/orm/migrations/0020_models_bigautofield.py
new file mode 100644
index 0000000000..f19b5dddbc
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/0020_models_bigautofield.py
@@ -0,0 +1,173 @@
1# Generated by Django 3.2.12 on 2022-03-06 03:28
2
3from django.db import migrations, models
4
5
6class Migration(migrations.Migration):
7
8 dependencies = [
9 ('orm', '0019_django_2_2'),
10 ]
11
12 operations = [
13 migrations.AlterField(
14 model_name='bitbakeversion',
15 name='id',
16 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
17 ),
18 migrations.AlterField(
19 model_name='build',
20 name='id',
21 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
22 ),
23 migrations.AlterField(
24 model_name='distro',
25 name='id',
26 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
27 ),
28 migrations.AlterField(
29 model_name='helptext',
30 name='id',
31 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
32 ),
33 migrations.AlterField(
34 model_name='layer',
35 name='id',
36 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
37 ),
38 migrations.AlterField(
39 model_name='layer_version',
40 name='id',
41 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
42 ),
43 migrations.AlterField(
44 model_name='layerversiondependency',
45 name='id',
46 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
47 ),
48 migrations.AlterField(
49 model_name='logmessage',
50 name='id',
51 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
52 ),
53 migrations.AlterField(
54 model_name='machine',
55 name='id',
56 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
57 ),
58 migrations.AlterField(
59 model_name='package',
60 name='id',
61 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
62 ),
63 migrations.AlterField(
64 model_name='package_dependency',
65 name='id',
66 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
67 ),
68 migrations.AlterField(
69 model_name='package_file',
70 name='id',
71 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
72 ),
73 migrations.AlterField(
74 model_name='project',
75 name='id',
76 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
77 ),
78 migrations.AlterField(
79 model_name='projectlayer',
80 name='id',
81 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
82 ),
83 migrations.AlterField(
84 model_name='projecttarget',
85 name='id',
86 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
87 ),
88 migrations.AlterField(
89 model_name='projectvariable',
90 name='id',
91 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
92 ),
93 migrations.AlterField(
94 model_name='provides',
95 name='id',
96 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
97 ),
98 migrations.AlterField(
99 model_name='recipe',
100 name='id',
101 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
102 ),
103 migrations.AlterField(
104 model_name='recipe_dependency',
105 name='id',
106 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
107 ),
108 migrations.AlterField(
109 model_name='release',
110 name='id',
111 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
112 ),
113 migrations.AlterField(
114 model_name='releasedefaultlayer',
115 name='id',
116 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
117 ),
118 migrations.AlterField(
119 model_name='target',
120 name='id',
121 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
122 ),
123 migrations.AlterField(
124 model_name='target_file',
125 name='id',
126 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
127 ),
128 migrations.AlterField(
129 model_name='target_image_file',
130 name='id',
131 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
132 ),
133 migrations.AlterField(
134 model_name='target_installed_package',
135 name='id',
136 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
137 ),
138 migrations.AlterField(
139 model_name='targetkernelfile',
140 name='id',
141 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
142 ),
143 migrations.AlterField(
144 model_name='targetsdkfile',
145 name='id',
146 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
147 ),
148 migrations.AlterField(
149 model_name='task',
150 name='id',
151 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
152 ),
153 migrations.AlterField(
154 model_name='task_dependency',
155 name='id',
156 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
157 ),
158 migrations.AlterField(
159 model_name='toastersetting',
160 name='id',
161 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
162 ),
163 migrations.AlterField(
164 model_name='variable',
165 name='id',
166 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
167 ),
168 migrations.AlterField(
169 model_name='variablehistory',
170 name='id',
171 field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
172 ),
173 ]
diff --git a/bitbake/lib/toaster/orm/migrations/0021_eventlogsimports.py b/bitbake/lib/toaster/orm/migrations/0021_eventlogsimports.py
new file mode 100644
index 0000000000..328eb5753c
--- /dev/null
+++ b/bitbake/lib/toaster/orm/migrations/0021_eventlogsimports.py
@@ -0,0 +1,22 @@
1# Generated by Django 4.2.5 on 2023-11-23 18:44
2
3from django.db import migrations, models
4
5
6class Migration(migrations.Migration):
7
8 dependencies = [
9 ('orm', '0020_models_bigautofield'),
10 ]
11
12 operations = [
13 migrations.CreateModel(
14 name='EventLogsImports',
15 fields=[
16 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17 ('name', models.CharField(max_length=255)),
18 ('imported', models.BooleanField(default=False)),
19 ('build_id', models.IntegerField(blank=True, null=True)),
20 ],
21 ),
22 ]
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py
index 7f7e922ade..19c9686206 100644
--- a/bitbake/lib/toaster/orm/models.py
+++ b/bitbake/lib/toaster/orm/models.py
@@ -58,7 +58,6 @@ if 'sqlite' in settings.DATABASES['default']['ENGINE']:
58 return _base_insert(self, *args, **kwargs) 58 return _base_insert(self, *args, **kwargs)
59 QuerySet._insert = _insert 59 QuerySet._insert = _insert
60 60
61 from django.utils import six
62 def _create_object_from_params(self, lookup, params): 61 def _create_object_from_params(self, lookup, params):
63 """ 62 """
64 Tries to create an object using passed params. 63 Tries to create an object using passed params.
@@ -108,7 +107,7 @@ class ToasterSetting(models.Model):
108 107
109 108
110class ProjectManager(models.Manager): 109class ProjectManager(models.Manager):
111 def create_project(self, name, release, existing_project=None): 110 def create_project(self, name, release, existing_project=None, imported=False):
112 if existing_project and (release is not None): 111 if existing_project and (release is not None):
113 prj = existing_project 112 prj = existing_project
114 prj.bitbake_version = release.bitbake_version 113 prj.bitbake_version = release.bitbake_version
@@ -135,19 +134,19 @@ class ProjectManager(models.Manager):
135 134
136 if release is None: 135 if release is None:
137 return prj 136 return prj
138 137 if not imported:
139 for rdl in release.releasedefaultlayer_set.all(): 138 for rdl in release.releasedefaultlayer_set.all():
140 lv = Layer_Version.objects.filter( 139 lv = Layer_Version.objects.filter(
141 layer__name=rdl.layer_name, 140 layer__name=rdl.layer_name,
142 release=release).first() 141 release=release).first()
143 142
144 if lv: 143 if lv:
145 ProjectLayer.objects.create(project=prj, 144 ProjectLayer.objects.create(project=prj,
146 layercommit=lv, 145 layercommit=lv,
147 optional=False) 146 optional=False)
148 else: 147 else:
149 logger.warning("Default project layer %s not found" % 148 logger.warning("Default project layer %s not found" %
150 rdl.layer_name) 149 rdl.layer_name)
151 150
152 return prj 151 return prj
153 152
@@ -1390,9 +1389,6 @@ class Machine(models.Model):
1390 return "Machine " + self.name + "(" + self.description + ")" 1389 return "Machine " + self.name + "(" + self.description + ")"
1391 1390
1392 1391
1393
1394
1395
1396class BitbakeVersion(models.Model): 1392class BitbakeVersion(models.Model):
1397 1393
1398 name = models.CharField(max_length=32, unique = True) 1394 name = models.CharField(max_length=32, unique = True)
@@ -1717,9 +1713,9 @@ class CustomImageRecipe(Recipe):
1717 1713
1718 def generate_recipe_file_contents(self): 1714 def generate_recipe_file_contents(self):
1719 """Generate the contents for the recipe file.""" 1715 """Generate the contents for the recipe file."""
1720 # If we have no excluded packages we only need to _append 1716 # If we have no excluded packages we only need to :append
1721 if self.excludes_set.count() == 0: 1717 if self.excludes_set.count() == 0:
1722 packages_conf = "IMAGE_INSTALL_append = \" " 1718 packages_conf = "IMAGE_INSTALL:append = \" "
1723 1719
1724 for pkg in self.appends_set.all(): 1720 for pkg in self.appends_set.all():
1725 packages_conf += pkg.name+' ' 1721 packages_conf += pkg.name+' '
@@ -1734,7 +1730,7 @@ class CustomImageRecipe(Recipe):
1734 packages_conf += "\"" 1730 packages_conf += "\""
1735 1731
1736 base_recipe_path = self.get_base_recipe_file() 1732 base_recipe_path = self.get_base_recipe_file()
1737 if base_recipe_path: 1733 if base_recipe_path and os.path.isfile(base_recipe_path):
1738 base_recipe = open(base_recipe_path, 'r').read() 1734 base_recipe = open(base_recipe_path, 'r').read()
1739 else: 1735 else:
1740 # Pass back None to trigger error message to user 1736 # Pass back None to trigger error message to user
@@ -1854,6 +1850,8 @@ def signal_runbuilds():
1854 os.kill(int(pidf.read()), SIGUSR1) 1850 os.kill(int(pidf.read()), SIGUSR1)
1855 except FileNotFoundError: 1851 except FileNotFoundError:
1856 logger.info("Stopping existing runbuilds: no current process found") 1852 logger.info("Stopping existing runbuilds: no current process found")
1853 except ProcessLookupError:
1854 logger.warning("Stopping existing runbuilds: process lookup not found")
1857 1855
1858class Distro(models.Model): 1856class Distro(models.Model):
1859 search_allowed_fields = ["name", "description", "layer_version__layer__name"] 1857 search_allowed_fields = ["name", "description", "layer_version__layer__name"]
@@ -1870,6 +1868,15 @@ class Distro(models.Model):
1870 def __unicode__(self): 1868 def __unicode__(self):
1871 return "Distro " + self.name + "(" + self.description + ")" 1869 return "Distro " + self.name + "(" + self.description + ")"
1872 1870
1871class EventLogsImports(models.Model):
1872 name = models.CharField(max_length=255)
1873 imported = models.BooleanField(default=False)
1874 build_id = models.IntegerField(blank=True, null=True)
1875
1876 def __str__(self):
1877 return self.name
1878
1879
1873django.db.models.signals.post_save.connect(invalidate_cache) 1880django.db.models.signals.post_save.connect(invalidate_cache)
1874django.db.models.signals.post_delete.connect(invalidate_cache) 1881django.db.models.signals.post_delete.connect(invalidate_cache)
1875django.db.models.signals.m2m_changed.connect(invalidate_cache) 1882django.db.models.signals.m2m_changed.connect(invalidate_cache)