diff options
Diffstat (limited to 'lib/toaster/orm')
-rw-r--r-- | lib/toaster/orm/fixtures/README | 2 | ||||
-rwxr-xr-x | lib/toaster/orm/fixtures/gen_fixtures.py | 447 | ||||
-rw-r--r-- | lib/toaster/orm/fixtures/oe-core.xml | 48 | ||||
-rw-r--r-- | lib/toaster/orm/fixtures/poky.xml | 118 | ||||
-rw-r--r-- | lib/toaster/orm/fixtures/settings.xml | 4 | ||||
-rw-r--r-- | lib/toaster/orm/management/commands/lsupdates.py | 16 | ||||
-rw-r--r-- | lib/toaster/orm/migrations/0020_models_bigautofield.py | 173 | ||||
-rw-r--r-- | lib/toaster/orm/migrations/0021_eventlogsimports.py | 22 | ||||
-rw-r--r-- | lib/toaster/orm/models.py | 49 |
9 files changed, 795 insertions, 84 deletions
diff --git a/lib/toaster/orm/fixtures/README b/lib/toaster/orm/fixtures/README index 1b1c660aa..7cd745e26 100644 --- a/lib/toaster/orm/fixtures/README +++ b/lib/toaster/orm/fixtures/README @@ -27,4 +27,4 @@ Data can be provided in XML, JSON and if installed YAML formats. Use the django management command manage.py loaddata <your fixture file> For further information see the Django command documentation at: -https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-loaddata +https://docs.djangoproject.com/en/3.2/ref/django-admin/#django-admin-loaddata diff --git a/lib/toaster/orm/fixtures/gen_fixtures.py b/lib/toaster/orm/fixtures/gen_fixtures.py new file mode 100755 index 000000000..71afe3914 --- /dev/null +++ b/lib/toaster/orm/fixtures/gen_fixtures.py @@ -0,0 +1,447 @@ +#!/usr/bin/env python3 +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# Generate Toaster Fixtures for 'poky.xml' and 'oe-core.xml' +# +# Copyright (C) 2022 Wind River Systems +# SPDX-License-Identifier: GPL-2.0-only +# +# Edit the 'current_releases' table for each new release cycle +# +# Usage: ./get_fixtures all +# + +import os +import sys +import argparse + +verbose = False + +#################################### +# Releases +# +# https://wiki.yoctoproject.org/wiki/Releases +# +# NOTE: for the current releases table, it helps to keep continuing releases +# in the same table positions since this minimizes the patch diff for review. +# The order of the table does not matter since Toaster presents them sorted. +# +# Traditionally, the two most current releases are included in addition to the +# 'master' branch and the local installation's 'HEAD'. +# It is also policy to include all active LTS releases. +# + +# [Codename, Yocto Project Version, Release Date, Current Version, Support Level, Poky Version, BitBake branch] +current_releases = [ + # Release slot #1 + ['Kirkstone','4.0','April 2022','4.0.8 (March 2023)','Stable - Long Term Support (until Apr. 2024)','','2.0'], + # Release slot #2 'local' + ['HEAD','HEAD','','Local Yocto Project','HEAD','','HEAD'], + # Release slot #3 'master' + ['Master','master','','Yocto Project master','master','','master'], + # Release slot #4 + ['Mickledore','4.2','April 2023','4.2.0 (April 2023)','Support for 7 months (until October 2023)','','2.4'], +# ['Langdale','4.1','October 2022','4.1.2 (January 2023)','Support for 7 months (until May 2023)','','2.2'], +# ['Honister','3.4','October 2021','3.4.2 (February 2022)','Support for 7 months (until May 2022)','26.0','1.52'], +# ['Hardknott','3.3','April 2021','3.3.5 (March 2022)','Stable - Support for 13 months (until Apr. 2022)','25.0','1.50'], +# ['Gatesgarth','3.2','Oct 2020','3.2.4 (May 2021)','EOL','24.0','1.48'], + # Optional Release slot #5 + ['Dunfell','3.1','April 2020','3.1.23 (February 2023)','Stable - Long Term Support (until Apr. 2024)','23.0','1.46'], +] + +default_poky_layers = [ + 'openembedded-core', + 'meta-poky', + 'meta-yocto-bsp', +] + +default_oe_core_layers = [ + 'openembedded-core', +] + +#################################### +# Templates + +prolog_template = '''\ +<?xml version="1.0" encoding="utf-8"?> +<django-objects version="1.0"> + <!-- Set the project default value for DISTRO --> + <object model="orm.toastersetting" pk="1"> + <field type="CharField" name="name">DEFCONF_DISTRO</field> + <field type="CharField" name="value">{{distro}}</field> + </object> +''' + +#<!-- Bitbake versions which correspond to the metadata release -->') +bitbakeversion_poky_template = '''\ + <object model="orm.bitbakeversion" pk="{{bitbake_id}}"> + <field type="CharField" name="name">{{name}}</field> + <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> + <field type="CharField" name="branch">{{branch}}</field> + <field type="CharField" name="dirpath">bitbake</field> + </object> +''' +bitbakeversion_oecore_template = '''\ + <object model="orm.bitbakeversion" pk="{{bitbake_id}}"> + <field type="CharField" name="name">{{name}}</field> + <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> + <field type="CharField" name="branch">{{bitbakeversion}}</field> + </object> +''' + +# <!-- Releases available --> +releases_available_template = '''\ + <object model="orm.release" pk="{{ra_count}}"> + <field type="CharField" name="name">{{name}}</field> + <field type="CharField" name="description">{{description}}</field> + <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">{{ra_count}}</field> + <field type="CharField" name="branch_name">{{release}}</field> + <field type="TextField" name="helptext">Toaster will run your builds {{help_source}}.</field> + </object> +''' + +# <!-- Default project layers for each release --> +default_layers_template = '''\ + <object model="orm.releasedefaultlayer" pk="{{rdl_count}}"> + <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field> + <field type="CharField" name="layer_name">{{layer}}</field> + </object> +''' + +default_layers_preface = '''\ + <!-- Default layers provided by poky + openembedded-core + meta-poky + meta-yocto-bsp + --> +''' + +layer_poky_template = '''\ + <object model="orm.layer" pk="{{layer_id}}"> + <field type="CharField" name="name">{{layer}}</field> + <field type="CharField" name="layer_index_url"></field> + <field type="CharField" name="vcs_url">{{vcs_url}}</field> + <field type="CharField" name="vcs_web_url">{{vcs_web_url}}</field> + <field type="CharField" name="vcs_web_tree_base_url">{{vcs_web_tree_base_url}}</field> + <field type="CharField" name="vcs_web_file_base_url">{{vcs_web_file_base_url}}</field> + </object> +''' + +layer_oe_core_template = '''\ + <object model="orm.layer" pk="{{layer_id}}"> + <field type="CharField" name="name">{{layer}}</field> + <field type="CharField" name="vcs_url">{{vcs_url}}</field> + <field type="CharField" name="vcs_web_url">{{vcs_web_url}}</field> + <field type="CharField" name="vcs_web_tree_base_url">{{vcs_web_tree_base_url}}</field> + <field type="CharField" name="vcs_web_file_base_url">{{vcs_web_file_base_url}}</field> + </object> +''' + +layer_version_template = '''\ + <object model="orm.layer_version" pk="{{lv_count}}"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">{{layer_id}}</field> + <field type="IntegerField" name="layer_source">0</field> + <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field> + <field type="CharField" name="branch">{{branch}}</field> + <field type="CharField" name="dirpath">{{dirpath}}</field> + </object> +''' + +layer_version_HEAD_template = '''\ + <object model="orm.layer_version" pk="{{lv_count}}"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">{{layer_id}}</field> + <field type="IntegerField" name="layer_source">0</field> + <field rel="ManyToOneRel" to="orm.release" name="release">{{release_id}}</field> + <field type="CharField" name="branch">{{branch}}</field> + <field type="CharField" name="commit">{{commit}}</field> + <field type="CharField" name="dirpath">{{dirpath}}</field> + </object> +''' + +layer_version_oe_core_template = '''\ + <object model="orm.layer_version" pk="1"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> + <field rel="ManyToOneRel" to="orm.release" name="release">2</field> + <field type="CharField" name="local_path">OE-CORE-LAYER-DIR</field> + <field type="CharField" name="branch">HEAD</field> + <field type="CharField" name="dirpath">meta</field> + <field type="IntegerField" name="layer_source">0</field> + </object> +''' + +epilog_template = '''\ +</django-objects> +''' + +################################# +# Helper Routines +# + +def print_str(str,fd): + # Avoid extra newline at end + if str and (str[-1] == '\n'): + str = str[0:-1] + print(str,file=fd) + +def print_template(template,params,fd): + for line in template.split('\n'): + p = line.find('{{') + while p > 0: + q = line.find('}}') + key = line[p+2:q] + if key in params: + line = line[0:p] + params[key] + line[q+2:] + else: + line = line[0:p] + '?' + key + '?' + line[q+2:] + p = line.find('{{') + if line: + print(line,file=fd) + +################################# +# Generate poky.xml +# + +def generate_poky(): + fd = open('poky.xml','w') + + params = {} + params['distro'] = 'poky' + print_template(prolog_template,params,fd) + print_str('',fd) + + print_str(' <!-- Bitbake versions which correspond to the metadata release -->',fd) + for i,release in enumerate(current_releases): + params = {} + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('HEAD')): # 'master', + params['release'] = params['release'][0].lower() + params['release'][1:] + params['name'] = params['release'] + params['bitbake_id'] = str(i+1) + params['branch'] = params['release'] + print_template(bitbakeversion_poky_template,params,fd) + print_str('',fd) + + print_str('',fd) + print_str(' <!-- Releases available -->',fd) + for i,release in enumerate(current_releases): + params = {} + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('HEAD')): #'master', + params['release'] = params['release'][0].lower() + params['release'][1:] + params['h_release'] = '?h={{release}}' + params['name'] = params['release'] + params['ra_count'] = str(i+1) + params['branch'] = params['release'] + + if 'HEAD' == params['release']: + params['help_source'] = 'with the version of the Yocto Project you have cloned or downloaded to your computer' + params['description'] = 'Local Yocto Project' + params['name'] = 'local' + else: + params['help_source'] = 'using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/{{h_release}}">Yocto Project {{Release}} branch</a>' + params['description'] = 'Yocto Project {{release_version}} "{{Release}}"' + if 'master' == params['release']: + params['h_release'] = '' + params['description'] = 'Yocto Project master' + + print_template(releases_available_template,params,fd) + print_str('',fd) + + print_str(' <!-- Default project layers for each release -->',fd) + rdl_count = 1 + for i,release in enumerate(current_releases): + for j,layer in enumerate(default_poky_layers): + params = {} + params['layer'] = layer + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('master','HEAD')): + params['release'] = params['release'][0].lower() + params['release'][1:] + params['release_id'] = str(i+1) + params['rdl_count'] = str(rdl_count) + params['branch'] = params['release'] + print_template(default_layers_template,params,fd) + rdl_count += 1 + print_str('',fd) + + print_str(default_layers_preface,fd) + lv_count = 1 + for i,layer in enumerate(default_poky_layers): + params = {} + params['layer'] = layer + params['layer_id'] = str(i+1) + params['vcs_url'] = 'git://git.yoctoproject.org/poky' + params['vcs_web_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky' + params['vcs_web_tree_base_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%' + params['vcs_web_file_base_url'] = 'https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%' + + if i: + print_str('',fd) + print_template(layer_poky_template,params,fd) + for j,release in enumerate(current_releases): + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('master','HEAD')): + params['release'] = params['release'][0].lower() + params['release'][1:] + params['release_id'] = str(j+1) + params['lv_count'] = str(lv_count) + params['branch'] = params['release'] + params['commit'] = params['release'] + + params['dirpath'] = params['layer'] + if params['layer'] in ('openembedded-core'): #'openembedded-core', + params['dirpath'] = 'meta' + + if 'HEAD' == params['release']: + print_template(layer_version_HEAD_template,params,fd) + else: + print_template(layer_version_template,params,fd) + lv_count += 1 + + print_str(epilog_template,fd) + fd.close() + +################################# +# Generate oe-core.xml +# + +def generate_oe_core(): + fd = open('oe-core.xml','w') + + params = {} + params['distro'] = 'nodistro' + print_template(prolog_template,params,fd) + print_str('',fd) + + print_str(' <!-- Bitbake versions which correspond to the metadata release -->',fd) + for i,release in enumerate(current_releases): + params = {} + params['release'] = release[0] + params['Release'] = release[0] + params['bitbakeversion'] = release[6] + params['release_version'] = release[1] + if not (params['release'] in ('HEAD')): # 'master', + params['release'] = params['release'][0].lower() + params['release'][1:] + params['name'] = params['release'] + params['bitbake_id'] = str(i+1) + params['branch'] = params['release'] + print_template(bitbakeversion_oecore_template,params,fd) + print_str('',fd) + + print_str(' <!-- Releases available -->',fd) + for i,release in enumerate(current_releases): + params = {} + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('HEAD')): #'master', + params['release'] = params['release'][0].lower() + params['release'][1:] + params['h_release'] = '?h={{release}}' + params['name'] = params['release'] + params['ra_count'] = str(i+1) + params['branch'] = params['release'] + + if 'HEAD' == params['release']: + params['help_source'] = 'with the version of OpenEmbedded that you have cloned or downloaded to your computer' + params['description'] = 'Local Openembedded' + params['name'] = 'local' + else: + params['help_source'] = 'using the tip of the <a href=\\"https://cgit.openembedded.org/openembedded-core/log/{{h_release}}\\">OpenEmbedded {{Release}}</a> branch' + params['description'] = 'Openembedded {{Release}}' + if 'master' == params['release']: + params['h_release'] = '' + params['description'] = 'OpenEmbedded core master' + params['Release'] = params['release'] + + print_template(releases_available_template,params,fd) + print_str('',fd) + + print_str(' <!-- Default layers for each release -->',fd) + rdl_count = 1 + for i,release in enumerate(current_releases): + for j,layer in enumerate(default_oe_core_layers): + params = {} + params['layer'] = layer + params['release'] = release[0] + params['Release'] = release[0] + params['release_version'] = release[1] + if not (params['release'] in ('master','HEAD')): + params['release'] = params['release'][0].lower() + params['release'][1:] + params['release_id'] = str(i+1) + params['rdl_count'] = str(rdl_count) + params['branch'] = params['release'] + print_template(default_layers_template,params,fd) + rdl_count += 1 + print_str('',fd) + + print_str('',fd) + print_str(' <!-- Layer for the Local release -->',fd) + lv_count = 1 + for i,layer in enumerate(default_oe_core_layers): + params = {} + params['layer'] = layer + params['layer_id'] = str(i+1) + params['vcs_url'] = 'git://git.openembedded.org/openembedded-core' + params['vcs_web_url'] = 'https://cgit.openembedded.org/openembedded-core' + params['vcs_web_tree_base_url'] = 'https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%' + params['vcs_web_file_base_url'] = 'https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%' + if i: + print_str('',fd) + print_template(layer_oe_core_template,params,fd) + + print_template(layer_version_oe_core_template,params,fd) + print_str('',fd) + + print_str(epilog_template,fd) + fd.close() + +################################# +# Help +# + +def list_releases(): + print("Release ReleaseVer BitbakeVer Support Level") + print("========== =========== ========== ==============================================") + for release in current_releases: + print("%10s %10s %11s %s" % (release[0],release[1],release[6],release[4])) + +################################# +# main +# + +def main(argv): + global verbose + + parser = argparse.ArgumentParser(description='gen_fixtures.py: table generate the fixture files') + parser.add_argument('--poky', '-p', action='store_const', const='poky', dest='command', help='Generate the poky.xml file') + parser.add_argument('--oe-core', '-o', action='store_const', const='oe_core', dest='command', help='Generate the oe-core.xml file') + parser.add_argument('--all', '-a', action='store_const', const='all', dest='command', help='Generate all fixture files') + parser.add_argument('--list', '-l', action='store_const', const='list', dest='command', help='List the release table') + parser.add_argument('--verbose', '-v', action='store_true', dest='verbose', help='Enable verbose debugging output') + args = parser.parse_args() + + verbose = args.verbose + if 'poky' == args.command: + generate_poky() + elif 'oe_core' == args.command: + generate_oe_core() + elif 'all' == args.command: + generate_poky() + generate_oe_core() + elif 'all' == args.command: + list_releases() + elif 'list' == args.command: + list_releases() + + else: + print("No command for 'gen_fixtures.py' selected") + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/lib/toaster/orm/fixtures/oe-core.xml b/lib/toaster/orm/fixtures/oe-core.xml index fd93f4d87..950f2a98a 100644 --- a/lib/toaster/orm/fixtures/oe-core.xml +++ b/lib/toaster/orm/fixtures/oe-core.xml @@ -8,9 +8,9 @@ <!-- Bitbake versions which correspond to the metadata release --> <object model="orm.bitbakeversion" pk="1"> - <field type="CharField" name="name">dunfell</field> + <field type="CharField" name="name">kirkstone</field> <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> - <field type="CharField" name="branch">1.46</field> + <field type="CharField" name="branch">2.0</field> </object> <object model="orm.bitbakeversion" pk="2"> <field type="CharField" name="name">HEAD</field> @@ -23,18 +23,23 @@ <field type="CharField" name="branch">master</field> </object> <object model="orm.bitbakeversion" pk="4"> - <field type="CharField" name="name">zeus</field> + <field type="CharField" name="name">mickledore</field> + <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> + <field type="CharField" name="branch">2.4</field> + </object> + <object model="orm.bitbakeversion" pk="5"> + <field type="CharField" name="name">dunfell</field> <field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field> - <field type="CharField" name="branch">1.44</field> + <field type="CharField" name="branch">1.46</field> </object> <!-- Releases available --> <object model="orm.release" pk="1"> - <field type="CharField" name="name">dunfell</field> - <field type="CharField" name="description">Openembedded Dunfell</field> + <field type="CharField" name="name">kirkstone</field> + <field type="CharField" name="description">Openembedded Kirkstone</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field> - <field type="CharField" name="branch_name">dunfell</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=dunfell\">OpenEmbedded Dunfell</a> branch.</field> + <field type="CharField" name="branch_name">kirkstone</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=kirkstone\">OpenEmbedded Kirkstone</a> branch.</field> </object> <object model="orm.release" pk="2"> <field type="CharField" name="name">local</field> @@ -48,14 +53,21 @@ <field type="CharField" name="description">OpenEmbedded core master</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field> <field type="CharField" name="branch_name">master</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/\">OpenEmbedded master</a> branch.</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/\">OpenEmbedded master</a> branch.</field> </object> <object model="orm.release" pk="4"> - <field type="CharField" name="name">zeus</field> - <field type="CharField" name="description">Openembedded Zeus</field> + <field type="CharField" name="name">mickledore</field> + <field type="CharField" name="description">Openembedded Mickledore</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field> - <field type="CharField" name="branch_name">zeus</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=zeus\">OpenEmbedded Zeus</a> branch.</field> + <field type="CharField" name="branch_name">mickledore</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=mickledore\">OpenEmbedded Mickledore</a> branch.</field> + </object> + <object model="orm.release" pk="5"> + <field type="CharField" name="name">dunfell</field> + <field type="CharField" name="description">Openembedded Dunfell</field> + <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field> + <field type="CharField" name="branch_name">dunfell</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=dunfell\">OpenEmbedded Dunfell</a> branch.</field> </object> <!-- Default layers for each release --> @@ -75,15 +87,19 @@ <field rel="ManyToOneRel" to="orm.release" name="release">4</field> <field type="CharField" name="layer_name">openembedded-core</field> </object> + <object model="orm.releasedefaultlayer" pk="5"> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="layer_name">openembedded-core</field> + </object> <!-- Layer for the Local release --> <object model="orm.layer" pk="1"> <field type="CharField" name="name">openembedded-core</field> <field type="CharField" name="vcs_url">git://git.openembedded.org/openembedded-core</field> - <field type="CharField" name="vcs_web_url">http://cgit.openembedded.org/openembedded-core</field> - <field type="CharField" name="vcs_web_tree_base_url">http://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> - <field type="CharField" name="vcs_web_file_base_url">http://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_url">https://cgit.openembedded.org/openembedded-core</field> + <field type="CharField" name="vcs_web_tree_base_url">https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_file_base_url">https://cgit.openembedded.org/openembedded-core/tree/%path%?h=%branch%</field> </object> <object model="orm.layer_version" pk="1"> <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> diff --git a/lib/toaster/orm/fixtures/poky.xml b/lib/toaster/orm/fixtures/poky.xml index 902bc88a5..121e52fd4 100644 --- a/lib/toaster/orm/fixtures/poky.xml +++ b/lib/toaster/orm/fixtures/poky.xml @@ -8,9 +8,9 @@ <!-- Bitbake versions which correspond to the metadata release --> <object model="orm.bitbakeversion" pk="1"> - <field type="CharField" name="name">dunfell</field> + <field type="CharField" name="name">kirkstone</field> <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> - <field type="CharField" name="branch">dunfell</field> + <field type="CharField" name="branch">kirkstone</field> <field type="CharField" name="dirpath">bitbake</field> </object> <object model="orm.bitbakeversion" pk="2"> @@ -26,20 +26,26 @@ <field type="CharField" name="dirpath">bitbake</field> </object> <object model="orm.bitbakeversion" pk="4"> - <field type="CharField" name="name">zeus</field> + <field type="CharField" name="name">mickledore</field> <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> - <field type="CharField" name="branch">zeus</field> + <field type="CharField" name="branch">mickledore</field> + <field type="CharField" name="dirpath">bitbake</field> + </object> + <object model="orm.bitbakeversion" pk="5"> + <field type="CharField" name="name">dunfell</field> + <field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field> + <field type="CharField" name="branch">dunfell</field> <field type="CharField" name="dirpath">bitbake</field> </object> <!-- Releases available --> <object model="orm.release" pk="1"> - <field type="CharField" name="name">dunfell</field> - <field type="CharField" name="description">Yocto Project 3.1 "Dunfell"</field> + <field type="CharField" name="name">kirkstone</field> + <field type="CharField" name="description">Yocto Project 4.0 "Kirkstone"</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field> - <field type="CharField" name="branch_name">dunfell</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell">Yocto Project Dunfell branch</a>.</field> + <field type="CharField" name="branch_name">kirkstone</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=kirkstone">Yocto Project Kirkstone branch</a>.</field> </object> <object model="orm.release" pk="2"> <field type="CharField" name="name">local</field> @@ -53,14 +59,21 @@ <field type="CharField" name="description">Yocto Project master</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">3</field> <field type="CharField" name="branch_name">master</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/">Yocto Project Master branch</a>.</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/">Yocto Project Master branch</a>.</field> </object> <object model="orm.release" pk="4"> - <field type="CharField" name="name">zeus</field> - <field type="CharField" name="description">Yocto Project 3.0 "Zeus"</field> + <field type="CharField" name="name">mickledore</field> + <field type="CharField" name="description">Yocto Project 4.2 "Mickledore"</field> <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">4</field> - <field type="CharField" name="branch_name">zeus</field> - <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=zeus">Yocto Project Zeus branch</a>.</field> + <field type="CharField" name="branch_name">mickledore</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=mickledore">Yocto Project Mickledore branch</a>.</field> + </object> + <object model="orm.release" pk="5"> + <field type="CharField" name="name">dunfell</field> + <field type="CharField" name="description">Yocto Project 3.1 "Dunfell"</field> + <field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">5</field> + <field type="CharField" name="branch_name">dunfell</field> + <field type="TextField" name="helptext">Toaster will run your builds using the tip of the <a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell">Yocto Project Dunfell branch</a>.</field> </object> <!-- Default project layers for each release --> @@ -112,6 +125,18 @@ <field rel="ManyToOneRel" to="orm.release" name="release">4</field> <field type="CharField" name="layer_name">meta-yocto-bsp</field> </object> + <object model="orm.releasedefaultlayer" pk="13"> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="layer_name">openembedded-core</field> + </object> + <object model="orm.releasedefaultlayer" pk="14"> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="layer_name">meta-poky</field> + </object> + <object model="orm.releasedefaultlayer" pk="15"> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="layer_name">meta-yocto-bsp</field> + </object> <!-- Default layers provided by poky openembedded-core @@ -122,15 +147,15 @@ <field type="CharField" name="name">openembedded-core</field> <field type="CharField" name="layer_index_url"></field> <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> - <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> - <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> - <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field> + <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> </object> <object model="orm.layer_version" pk="1"> <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">1</field> - <field type="CharField" name="branch">dunfell</field> + <field type="CharField" name="branch">kirkstone</field> <field type="CharField" name="dirpath">meta</field> </object> <object model="orm.layer_version" pk="2"> @@ -152,7 +177,14 @@ <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">4</field> - <field type="CharField" name="branch">zeus</field> + <field type="CharField" name="branch">mickledore</field> + <field type="CharField" name="dirpath">meta</field> + </object> + <object model="orm.layer_version" pk="5"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">1</field> + <field type="IntegerField" name="layer_source">0</field> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="branch">dunfell</field> <field type="CharField" name="dirpath">meta</field> </object> @@ -160,18 +192,18 @@ <field type="CharField" name="name">meta-poky</field> <field type="CharField" name="layer_index_url"></field> <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> - <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> - <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> - <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field> + <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> </object> - <object model="orm.layer_version" pk="5"> + <object model="orm.layer_version" pk="6"> <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">1</field> - <field type="CharField" name="branch">dunfell</field> + <field type="CharField" name="branch">kirkstone</field> <field type="CharField" name="dirpath">meta-poky</field> </object> - <object model="orm.layer_version" pk="6"> + <object model="orm.layer_version" pk="7"> <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">2</field> @@ -179,18 +211,25 @@ <field type="CharField" name="commit">HEAD</field> <field type="CharField" name="dirpath">meta-poky</field> </object> - <object model="orm.layer_version" pk="7"> + <object model="orm.layer_version" pk="8"> <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">3</field> <field type="CharField" name="branch">master</field> <field type="CharField" name="dirpath">meta-poky</field> </object> - <object model="orm.layer_version" pk="8"> + <object model="orm.layer_version" pk="9"> <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">4</field> - <field type="CharField" name="branch">zeus</field> + <field type="CharField" name="branch">mickledore</field> + <field type="CharField" name="dirpath">meta-poky</field> + </object> + <object model="orm.layer_version" pk="10"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">2</field> + <field type="IntegerField" name="layer_source">0</field> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="branch">dunfell</field> <field type="CharField" name="dirpath">meta-poky</field> </object> @@ -198,18 +237,18 @@ <field type="CharField" name="name">meta-yocto-bsp</field> <field type="CharField" name="layer_index_url"></field> <field type="CharField" name="vcs_url">git://git.yoctoproject.org/poky</field> - <field type="CharField" name="vcs_web_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky</field> - <field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> - <field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky</field> + <field type="CharField" name="vcs_web_tree_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> + <field type="CharField" name="vcs_web_file_base_url">https://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field> </object> - <object model="orm.layer_version" pk="9"> + <object model="orm.layer_version" pk="11"> <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">1</field> - <field type="CharField" name="branch">dunfell</field> + <field type="CharField" name="branch">kirkstone</field> <field type="CharField" name="dirpath">meta-yocto-bsp</field> </object> - <object model="orm.layer_version" pk="10"> + <object model="orm.layer_version" pk="12"> <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">2</field> @@ -217,18 +256,25 @@ <field type="CharField" name="commit">HEAD</field> <field type="CharField" name="dirpath">meta-yocto-bsp</field> </object> - <object model="orm.layer_version" pk="11"> + <object model="orm.layer_version" pk="13"> <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">3</field> <field type="CharField" name="branch">master</field> <field type="CharField" name="dirpath">meta-yocto-bsp</field> </object> - <object model="orm.layer_version" pk="12"> + <object model="orm.layer_version" pk="14"> <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> <field type="IntegerField" name="layer_source">0</field> <field rel="ManyToOneRel" to="orm.release" name="release">4</field> - <field type="CharField" name="branch">zeus</field> + <field type="CharField" name="branch">mickledore</field> + <field type="CharField" name="dirpath">meta-yocto-bsp</field> + </object> + <object model="orm.layer_version" pk="15"> + <field rel="ManyToOneRel" to="orm.layer" name="layer">3</field> + <field type="IntegerField" name="layer_source">0</field> + <field rel="ManyToOneRel" to="orm.release" name="release">5</field> + <field type="CharField" name="branch">dunfell</field> <field type="CharField" name="dirpath">meta-yocto-bsp</field> </object> </django-objects> diff --git a/lib/toaster/orm/fixtures/settings.xml b/lib/toaster/orm/fixtures/settings.xml index 78c0fdca7..02c26a697 100644 --- a/lib/toaster/orm/fixtures/settings.xml +++ b/lib/toaster/orm/fixtures/settings.xml @@ -12,14 +12,14 @@ </object> <object model="orm.toastersetting" pk="4"> <field type="CharField" name="name">DEFCONF_MACHINE</field> - <field type="CharField" name="value">qemux86</field> + <field type="CharField" name="value">qemux86-64</field> </object> <object model="orm.toastersetting" pk="5"> <field type="CharField" name="name">DEFCONF_SSTATE_DIR</field> <field type="CharField" name="value">${TOPDIR}/../sstate-cache</field> </object> <object model="orm.toastersetting" pk="6"> - <field type="CharField" name="name">DEFCONF_IMAGE_INSTALL_append</field> + <field type="CharField" name="name">DEFCONF_IMAGE_INSTALL:append</field> <field type="CharField" name="value"></field> </object> <object model="orm.toastersetting" pk="7"> diff --git a/lib/toaster/orm/management/commands/lsupdates.py b/lib/toaster/orm/management/commands/lsupdates.py index 2fbd7be3d..6d64830eb 100644 --- a/lib/toaster/orm/management/commands/lsupdates.py +++ b/lib/toaster/orm/management/commands/lsupdates.py @@ -21,7 +21,7 @@ import threading import time logger = logging.getLogger("toaster") -DEFAULT_LAYERINDEX_SERVER = "http://layers.openembedded.org/layerindex/api/" +DEFAULT_LAYERINDEX_SERVER = "https://layers.openembedded.org/layerindex/api/" # Add path to bitbake modules for layerindexlib # lib/toaster/orm/management/commands/lsupdates.py (abspath) @@ -40,7 +40,7 @@ class Spinner(threading.Thread): """ A simple progress spinner to indicate download/parsing is happening""" def __init__(self, *args, **kwargs): super(Spinner, self).__init__(*args, **kwargs) - self.setDaemon(True) + self.daemon = True self.signal = True def run(self): @@ -87,13 +87,13 @@ class Command(BaseCommand): # update branches; only those that we already have names listed in the # Releases table - whitelist_branch_names = [rel.branch_name - for rel in Release.objects.all()] - if len(whitelist_branch_names) == 0: + allowed_branch_names = [rel.branch_name + for rel in Release.objects.all()] + if len(allowed_branch_names) == 0: raise Exception("Failed to make list of branches to fetch") logger.info("Fetching metadata for %s", - " ".join(whitelist_branch_names)) + " ".join(allowed_branch_names)) # We require a non-empty bb.data, but we can fake it with a dictionary layerindex = layerindexlib.LayerIndex({"DUMMY" : "VALUE"}) @@ -101,8 +101,8 @@ class Command(BaseCommand): http_progress = Spinner() http_progress.start() - if whitelist_branch_names: - url_branches = ";branch=%s" % ','.join(whitelist_branch_names) + if allowed_branch_names: + url_branches = ";branch=%s" % ','.join(allowed_branch_names) else: url_branches = "" layerindex.load_layerindex("%s%s" % (self.apiurl, url_branches)) diff --git a/lib/toaster/orm/migrations/0020_models_bigautofield.py b/lib/toaster/orm/migrations/0020_models_bigautofield.py new file mode 100644 index 000000000..f19b5dddb --- /dev/null +++ b/lib/toaster/orm/migrations/0020_models_bigautofield.py @@ -0,0 +1,173 @@ +# Generated by Django 3.2.12 on 2022-03-06 03:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orm', '0019_django_2_2'), + ] + + operations = [ + migrations.AlterField( + model_name='bitbakeversion', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='build', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='distro', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='helptext', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='layer', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='layer_version', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='layerversiondependency', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='logmessage', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='machine', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='package', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='package_dependency', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='package_file', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='project', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='projectlayer', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='projecttarget', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='projectvariable', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='provides', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='recipe', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='recipe_dependency', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='release', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='releasedefaultlayer', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='target', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='target_file', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='target_image_file', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='target_installed_package', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='targetkernelfile', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='targetsdkfile', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='task', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='task_dependency', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='toastersetting', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='variable', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='variablehistory', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/lib/toaster/orm/migrations/0021_eventlogsimports.py b/lib/toaster/orm/migrations/0021_eventlogsimports.py new file mode 100644 index 000000000..328eb5753 --- /dev/null +++ b/lib/toaster/orm/migrations/0021_eventlogsimports.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2023-11-23 18:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orm', '0020_models_bigautofield'), + ] + + operations = [ + migrations.CreateModel( + name='EventLogsImports', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('imported', models.BooleanField(default=False)), + ('build_id', models.IntegerField(blank=True, null=True)), + ], + ), + ] diff --git a/lib/toaster/orm/models.py b/lib/toaster/orm/models.py index 7f7e922ad..19c968620 100644 --- a/lib/toaster/orm/models.py +++ b/lib/toaster/orm/models.py @@ -58,7 +58,6 @@ if 'sqlite' in settings.DATABASES['default']['ENGINE']: return _base_insert(self, *args, **kwargs) QuerySet._insert = _insert - from django.utils import six def _create_object_from_params(self, lookup, params): """ Tries to create an object using passed params. @@ -108,7 +107,7 @@ class ToasterSetting(models.Model): class ProjectManager(models.Manager): - def create_project(self, name, release, existing_project=None): + def create_project(self, name, release, existing_project=None, imported=False): if existing_project and (release is not None): prj = existing_project prj.bitbake_version = release.bitbake_version @@ -135,19 +134,19 @@ class ProjectManager(models.Manager): if release is None: return prj - - for rdl in release.releasedefaultlayer_set.all(): - lv = Layer_Version.objects.filter( - layer__name=rdl.layer_name, - release=release).first() - - if lv: - ProjectLayer.objects.create(project=prj, - layercommit=lv, - optional=False) - else: - logger.warning("Default project layer %s not found" % - rdl.layer_name) + if not imported: + for rdl in release.releasedefaultlayer_set.all(): + lv = Layer_Version.objects.filter( + layer__name=rdl.layer_name, + release=release).first() + + if lv: + ProjectLayer.objects.create(project=prj, + layercommit=lv, + optional=False) + else: + logger.warning("Default project layer %s not found" % + rdl.layer_name) return prj @@ -1390,9 +1389,6 @@ class Machine(models.Model): return "Machine " + self.name + "(" + self.description + ")" - - - class BitbakeVersion(models.Model): name = models.CharField(max_length=32, unique = True) @@ -1717,9 +1713,9 @@ class CustomImageRecipe(Recipe): def generate_recipe_file_contents(self): """Generate the contents for the recipe file.""" - # If we have no excluded packages we only need to _append + # If we have no excluded packages we only need to :append if self.excludes_set.count() == 0: - packages_conf = "IMAGE_INSTALL_append = \" " + packages_conf = "IMAGE_INSTALL:append = \" " for pkg in self.appends_set.all(): packages_conf += pkg.name+' ' @@ -1734,7 +1730,7 @@ class CustomImageRecipe(Recipe): packages_conf += "\"" base_recipe_path = self.get_base_recipe_file() - if base_recipe_path: + if base_recipe_path and os.path.isfile(base_recipe_path): base_recipe = open(base_recipe_path, 'r').read() else: # Pass back None to trigger error message to user @@ -1854,6 +1850,8 @@ def signal_runbuilds(): os.kill(int(pidf.read()), SIGUSR1) except FileNotFoundError: logger.info("Stopping existing runbuilds: no current process found") + except ProcessLookupError: + logger.warning("Stopping existing runbuilds: process lookup not found") class Distro(models.Model): search_allowed_fields = ["name", "description", "layer_version__layer__name"] @@ -1870,6 +1868,15 @@ class Distro(models.Model): def __unicode__(self): return "Distro " + self.name + "(" + self.description + ")" +class EventLogsImports(models.Model): + name = models.CharField(max_length=255) + imported = models.BooleanField(default=False) + build_id = models.IntegerField(blank=True, null=True) + + def __str__(self): + return self.name + + django.db.models.signals.post_save.connect(invalidate_cache) django.db.models.signals.post_delete.connect(invalidate_cache) django.db.models.signals.m2m_changed.connect(invalidate_cache) |