Complete Yocto mirror with license table for TQMa6UL (2038-compliance)

- 264 license table entries with exact download URLs (224/264 resolved)
- Complete sources/ directory with all BitBake recipes
- Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl)
- Full traceability for Softwarefreigabeantrag
- GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4
- License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
Siggi (OpenClaw Agent)
2026-03-01 20:58:18 +00:00
commit 16accb6b24
15086 changed files with 1292356 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
# Fixtures directory
Fixtures are data dumps that can be loaded into Toaster's database to provide
configuration and data.
In this directory we have the fixtures which are loaded the first time you start Toaster.
This is to provide useful default values and metadata to Toaster.
- settings.xml This Contains Toaster wide settings, such as the default values for
certain bitbake variables.
- poky.xml This is the default release data for supported poky based setup
- oe-core.xml This is the default release data for supported oe-core based setups
# Custom data/configuration
- custom.xml
To add custom initial data/configuration to Toaster place a file called
"custom.xml" in this directory. If present it will be loaded into the database.
We suggest that this is used to overlay any configuration already done.
All objects loaded with the same primary keys overwrite the existing data.
Data can be provided in XML, JSON and if installed YAML formats.
# To load data at any point in time
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/3.2/ref/django-admin/#django-admin-loaddata

View File

@@ -0,0 +1,49 @@
#!/bin/bash
# Copyright (C) 2017 Intel Corp.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# This is sample software. Rename it to 'custom_toaster_append.sh' and
# enable the respective custom sections.
verbose=0
if [ $verbose -ne 0 ] ; then
echo "custom_toaster_append.sh:$*"
fi
if [ "toaster_prepend" = "$1" ] ; then
echo "Add custom actions here when Toaster script is started"
fi
if [ "web_start_postpend" = "$1" ] ; then
echo "Add custom actions here after Toaster web service is started"
fi
if [ "web_stop_postpend" = "$1" ] ; then
echo "Add custom actions here after Toaster web service is stopped"
fi
if [ "noweb_start_postpend" = "$1" ] ; then
echo "Add custom actions here after Toaster (no web) service is started"
fi
if [ "noweb_stop_postpend" = "$1" ] ; then
echo "Add custom actions here after Toaster (no web) service is stopped"
fi
if [ "toaster_postpend" = "$1" ] ; then
echo "Add custom actions here after Toaster script is done"
fi

View File

@@ -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 &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/{{h_release}}"&gt;Yocto Project {{Release}} branch&lt;/a&gt;'
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 &lt;a href=\\"https://cgit.openembedded.org/openembedded-core/log/{{h_release}}\\"&gt;OpenEmbedded {{Release}}&lt;/a&gt; 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:])

View File

@@ -0,0 +1,113 @@
<?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">nodistro</field>
</object>
<!-- Bitbake versions which correspond to the metadata release -->
<object model="orm.bitbakeversion" pk="1">
<field type="CharField" name="name">kirkstone</field>
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">2.0</field>
</object>
<object model="orm.bitbakeversion" pk="2">
<field type="CharField" name="name">HEAD</field>
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">HEAD</field>
</object>
<object model="orm.bitbakeversion" pk="3">
<field type="CharField" name="name">master</field>
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">master</field>
</object>
<object model="orm.bitbakeversion" pk="4">
<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.46</field>
</object>
<!-- Releases available -->
<object model="orm.release" pk="1">
<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">kirkstone</field>
<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>
</object>
<object model="orm.release" pk="2">
<field type="CharField" name="name">local</field>
<field type="CharField" name="description">Local Openembedded</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">2</field>
<field type="CharField" name="branch_name">HEAD</field>
<field type="TextField" name="helptext">Toaster will run your builds with the version of OpenEmbedded that you have cloned or downloaded to your computer.</field>
</object>
<object model="orm.release" pk="3">
<field type="CharField" name="name">master</field>
<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 &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/\"&gt;OpenEmbedded master&lt;/a&gt; branch.</field>
</object>
<object model="orm.release" pk="4">
<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">mickledore</field>
<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>
</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 &lt;a href=\"https://cgit.openembedded.org/openembedded-core/log/?h=dunfell\"&gt;OpenEmbedded Dunfell&lt;/a&gt; branch.</field>
</object>
<!-- Default layers for each release -->
<object model="orm.releasedefaultlayer" pk="1">
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="2">
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="3">
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="4">
<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">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>
<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>
</django-objects>

View File

@@ -0,0 +1,280 @@
<?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">poky</field>
</object>
<!-- Bitbake versions which correspond to the metadata release -->
<object model="orm.bitbakeversion" pk="1">
<field type="CharField" name="name">kirkstone</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
<field type="CharField" name="branch">kirkstone</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<object model="orm.bitbakeversion" pk="2">
<field type="CharField" name="name">HEAD</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
<field type="CharField" name="branch">HEAD</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<object model="orm.bitbakeversion" pk="3">
<field type="CharField" name="name">master</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<object model="orm.bitbakeversion" pk="4">
<field type="CharField" name="name">mickledore</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</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">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">kirkstone</field>
<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>
</object>
<object model="orm.release" pk="2">
<field type="CharField" name="name">local</field>
<field type="CharField" name="description">Local Yocto Project</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">2</field>
<field type="CharField" name="branch_name">HEAD</field>
<field type="TextField" name="helptext">Toaster will run your builds with the version of the Yocto Project you have cloned or downloaded to your computer.</field>
</object>
<object model="orm.release" pk="3">
<field type="CharField" name="name">master</field>
<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 &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/"&gt;Yocto Project Master branch&lt;/a&gt;.</field>
</object>
<object model="orm.release" pk="4">
<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">mickledore</field>
<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>
</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 &lt;a href="https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=dunfell"&gt;Yocto Project Dunfell branch&lt;/a&gt;.</field>
</object>
<!-- Default project layers for each release -->
<object model="orm.releasedefaultlayer" pk="1">
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="2">
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="layer_name">meta-poky</field>
</object>
<object model="orm.releasedefaultlayer" pk="3">
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
</object>
<object model="orm.releasedefaultlayer" pk="4">
<field rel="ManyToOneRel" to="orm.release" name="release">2</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">2</field>
<field type="CharField" name="layer_name">meta-poky</field>
</object>
<object model="orm.releasedefaultlayer" pk="6">
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
</object>
<object model="orm.releasedefaultlayer" pk="7">
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="8">
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">meta-poky</field>
</object>
<object model="orm.releasedefaultlayer" pk="9">
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
</object>
<object model="orm.releasedefaultlayer" pk="10">
<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="11">
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="layer_name">meta-poky</field>
</object>
<object model="orm.releasedefaultlayer" pk="12">
<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
meta-poky
meta-yocto-bsp
-->
<object model="orm.layer" pk="1">
<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">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">kirkstone</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer_version" pk="2">
<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">2</field>
<field type="CharField" name="branch">HEAD</field>
<field type="CharField" name="commit">HEAD</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer_version" pk="3">
<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">3</field>
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer_version" pk="4">
<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">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>
<object model="orm.layer" pk="2">
<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">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="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">kirkstone</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<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>
<field type="CharField" name="branch">HEAD</field>
<field type="CharField" name="commit">HEAD</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<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="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">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>
<object model="orm.layer" pk="3">
<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">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="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">kirkstone</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
<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>
<field type="CharField" name="branch">HEAD</field>
<field type="CharField" name="commit">HEAD</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
<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="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">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>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
<!-- Default project settings -->
<!-- pk=1 is DISTRO -->
<object model="orm.toastersetting" pk="2">
<field type="CharField" name="name">DEFAULT_RELEASE</field>
<field type="CharField" name="value">master</field>
</object>
<object model="orm.toastersetting" pk="3">
<field type="CharField" name="name">DEFCONF_PACKAGE_CLASSES</field>
<field type="CharField" name="value">package_rpm</field>
</object>
<object model="orm.toastersetting" pk="4">
<field type="CharField" name="name">DEFCONF_MACHINE</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="value"></field>
</object>
<object model="orm.toastersetting" pk="7">
<field type="CharField" name="name">DEFCONF_IMAGE_FSTYPES</field>
<field type="CharField" name="value">ext3 jffs2 tar.bz2</field>
</object>
<object model="orm.toastersetting" pk="8">
<field type="CharField" name="name">DEFCONF_DL_DIR</field>
<field type="CharField" name="value">${TOPDIR}/../downloads</field>
</object>
</django-objects>

View File

@@ -0,0 +1,290 @@
#
# BitBake Toaster Implementation
#
# Copyright (C) 2016-2017 Intel Corporation
#
# SPDX-License-Identifier: GPL-2.0-only
#
from django.core.management.base import BaseCommand
from orm.models import Layer, Release, Layer_Version
from orm.models import LayerVersionDependency, Machine, Recipe
from orm.models import Distro
from orm.models import ToasterSetting
import os
import sys
import logging
import threading
import time
logger = logging.getLogger("toaster")
DEFAULT_LAYERINDEX_SERVER = "https://layers.openembedded.org/layerindex/api/"
# Add path to bitbake modules for layerindexlib
# lib/toaster/orm/management/commands/lsupdates.py (abspath)
# lib/toaster/orm/management/commands (dirname)
# lib/toaster/orm/management (dirname)
# lib/toaster/orm (dirname)
# lib/toaster/ (dirname)
# lib/ (dirname)
path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
sys.path.insert(0, path)
import layerindexlib
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.daemon = True
self.signal = True
def run(self):
os.system('setterm -cursor off')
while self.signal:
for char in ["/", "-", "\\", "|"]:
sys.stdout.write("\r" + char)
sys.stdout.flush()
time.sleep(0.25)
os.system('setterm -cursor on')
def stop(self):
self.signal = False
class Command(BaseCommand):
args = ""
help = "Updates locally cached information from a layerindex server"
def mini_progress(self, what, i, total):
i = i + 1
pec = (float(i)/float(total))*100
sys.stdout.write("\rUpdating %s %d%%" %
(what,
pec))
sys.stdout.flush()
if int(pec) == 100:
sys.stdout.write("\n")
sys.stdout.flush()
def update(self):
"""
Fetches layer, recipe and machine information from a layerindex
server
"""
os.system('setterm -cursor off')
self.apiurl = DEFAULT_LAYERINDEX_SERVER
if ToasterSetting.objects.filter(name='CUSTOM_LAYERINDEX_SERVER').count() == 1:
self.apiurl = ToasterSetting.objects.get(name = 'CUSTOM_LAYERINDEX_SERVER').value
assert self.apiurl is not None
# update branches; only those that we already have names listed in the
# Releases table
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(allowed_branch_names))
# We require a non-empty bb.data, but we can fake it with a dictionary
layerindex = layerindexlib.LayerIndex({"DUMMY" : "VALUE"})
http_progress = Spinner()
http_progress.start()
if allowed_branch_names:
url_branches = ";branch=%s" % ','.join(allowed_branch_names)
else:
url_branches = ""
layerindex.load_layerindex("%s%s" % (self.apiurl, url_branches))
http_progress.stop()
# We know we're only processing one entry, so we reference it here
# (this is cheating...)
index = layerindex.indexes[0]
# Map the layer index branches to toaster releases
li_branch_id_to_toaster_release = {}
logger.info("Processing releases")
total = len(index.branches)
for i, id in enumerate(index.branches):
li_branch_id_to_toaster_release[id] = \
Release.objects.get(name=index.branches[id].name)
self.mini_progress("Releases", i, total)
# keep a track of the layerindex (li) id mappings so that
# layer_versions can be created for these layers later on
li_layer_id_to_toaster_layer_id = {}
logger.info("Processing layers")
total = len(index.layerItems)
for i, id in enumerate(index.layerItems):
try:
l, created = Layer.objects.get_or_create(name=index.layerItems[id].name)
l.up_date = index.layerItems[id].updated
l.summary = index.layerItems[id].summary
l.description = index.layerItems[id].description
if created:
# predefined layers in the fixtures (for example poky.xml)
# always preempt the Layer Index for these values
l.vcs_url = index.layerItems[id].vcs_url
l.vcs_web_url = index.layerItems[id].vcs_web_url
l.vcs_web_tree_base_url = index.layerItems[id].vcs_web_tree_base_url
l.vcs_web_file_base_url = index.layerItems[id].vcs_web_file_base_url
l.save()
except Layer.MultipleObjectsReturned:
logger.info("Skipped %s as we found multiple layers and "
"don't know which to update" %
index.layerItems[id].name)
li_layer_id_to_toaster_layer_id[id] = l.pk
self.mini_progress("layers", i, total)
# update layer_versions
logger.info("Processing layer versions")
# Map Layer index layer_branch object id to
# layer_version toaster object id
li_layer_branch_id_to_toaster_lv_id = {}
total = len(index.layerBranches)
for i, id in enumerate(index.layerBranches):
# release as defined by toaster map to layerindex branch
release = li_branch_id_to_toaster_release[index.layerBranches[id].branch_id]
try:
lv, created = Layer_Version.objects.get_or_create(
layer=Layer.objects.get(
pk=li_layer_id_to_toaster_layer_id[index.layerBranches[id].layer_id]),
release=release
)
except KeyError:
logger.warning(
"No such layerindex layer referenced by layerbranch %d" %
index.layerBranches[id].layer_id)
continue
if created:
lv.release = li_branch_id_to_toaster_release[index.layerBranches[id].branch_id]
lv.up_date = index.layerBranches[id].updated
lv.commit = index.layerBranches[id].actual_branch
lv.dirpath = index.layerBranches[id].vcs_subdir
lv.save()
li_layer_branch_id_to_toaster_lv_id[index.layerBranches[id].id] =\
lv.pk
self.mini_progress("layer versions", i, total)
logger.info("Processing layer version dependencies")
dependlist = {}
for id in index.layerDependencies:
try:
lv = Layer_Version.objects.get(
pk=li_layer_branch_id_to_toaster_lv_id[index.layerDependencies[id].layerbranch_id])
except Layer_Version.DoesNotExist as e:
continue
if lv not in dependlist:
dependlist[lv] = []
try:
layer_id = li_layer_id_to_toaster_layer_id[index.layerDependencies[id].dependency_id]
dependlist[lv].append(
Layer_Version.objects.get(layer__pk=layer_id,
release=lv.release))
except Layer_Version.DoesNotExist:
logger.warning("Cannot find layer version (ls:%s),"
"up_id:%s lv:%s" %
(self, index.layerDependencies[id].dependency_id, lv))
total = len(dependlist)
for i, lv in enumerate(dependlist):
LayerVersionDependency.objects.filter(layer_version=lv).delete()
for lvd in dependlist[lv]:
LayerVersionDependency.objects.get_or_create(layer_version=lv,
depends_on=lvd)
self.mini_progress("Layer version dependencies", i, total)
# update Distros
logger.info("Processing distro information")
total = len(index.distros)
for i, id in enumerate(index.distros):
distro, created = Distro.objects.get_or_create(
name=index.distros[id].name,
layer_version=Layer_Version.objects.get(
pk=li_layer_branch_id_to_toaster_lv_id[index.distros[id].layerbranch_id]))
distro.up_date = index.distros[id].updated
distro.name = index.distros[id].name
distro.description = index.distros[id].description
distro.save()
self.mini_progress("distros", i, total)
# update machines
logger.info("Processing machine information")
total = len(index.machines)
for i, id in enumerate(index.machines):
mo, created = Machine.objects.get_or_create(
name=index.machines[id].name,
layer_version=Layer_Version.objects.get(
pk=li_layer_branch_id_to_toaster_lv_id[index.machines[id].layerbranch_id]))
mo.up_date = index.machines[id].updated
mo.name = index.machines[id].name
mo.description = index.machines[id].description
mo.save()
self.mini_progress("machines", i, total)
# update recipes; paginate by layer version / layer branch
logger.info("Processing recipe information")
total = len(index.recipes)
for i, id in enumerate(index.recipes):
try:
lv_id = li_layer_branch_id_to_toaster_lv_id[index.recipes[id].layerbranch_id]
lv = Layer_Version.objects.get(pk=lv_id)
ro, created = Recipe.objects.get_or_create(
layer_version=lv,
name=index.recipes[id].pn
)
ro.layer_version = lv
ro.up_date = index.recipes[id].updated
ro.name = index.recipes[id].pn
ro.version = index.recipes[id].pv
ro.summary = index.recipes[id].summary
ro.description = index.recipes[id].description
ro.section = index.recipes[id].section
ro.license = index.recipes[id].license
ro.homepage = index.recipes[id].homepage
ro.bugtracker = index.recipes[id].bugtracker
ro.file_path = index.recipes[id].fullpath
ro.is_image = 'image' in index.recipes[id].inherits.split()
ro.save()
except Exception as e:
logger.warning("Failed saving recipe %s", e)
self.mini_progress("recipes", i, total)
os.system('setterm -cursor on')
def handle(self, **options):
self.update()

View File

@@ -0,0 +1,504 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='BitbakeVersion',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=32)),
('giturl', models.URLField()),
('branch', models.CharField(max_length=32)),
('dirpath', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='Branch',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('name', models.CharField(max_length=50)),
('short_description', models.CharField(max_length=50, blank=True)),
],
options={
'verbose_name_plural': 'Branches',
},
),
migrations.CreateModel(
name='Build',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('machine', models.CharField(max_length=100)),
('distro', models.CharField(max_length=100)),
('distro_version', models.CharField(max_length=100)),
('started_on', models.DateTimeField()),
('completed_on', models.DateTimeField()),
('outcome', models.IntegerField(default=2, choices=[(0, b'Succeeded'), (1, b'Failed'), (2, b'In Progress')])),
('cooker_log_path', models.CharField(max_length=500)),
('build_name', models.CharField(max_length=100)),
('bitbake_version', models.CharField(max_length=50)),
],
),
migrations.CreateModel(
name='BuildArtifact',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('file_name', models.FilePathField()),
('file_size', models.IntegerField()),
('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='HelpText',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('area', models.IntegerField(choices=[(0, b'variable')])),
('key', models.CharField(max_length=100)),
('text', models.TextField()),
('build', models.ForeignKey(related_name='helptext_build', to='orm.Build', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Layer',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('name', models.CharField(max_length=100)),
('layer_index_url', models.URLField()),
('vcs_url', models.URLField(default=None, null=True)),
('vcs_web_url', models.URLField(default=None, null=True)),
('vcs_web_tree_base_url', models.URLField(default=None, null=True)),
('vcs_web_file_base_url', models.URLField(default=None, null=True)),
('summary', models.TextField(default=None, help_text=b'One-line description of the layer', null=True)),
('description', models.TextField(default=None, null=True)),
],
),
migrations.CreateModel(
name='Layer_Version',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('branch', models.CharField(max_length=80)),
('commit', models.CharField(max_length=100)),
('dirpath', models.CharField(default=None, max_length=255, null=True)),
('priority', models.IntegerField(default=0)),
('local_path', models.FilePathField(default=b'/', max_length=1024)),
('build', models.ForeignKey(related_name='layer_version_build', default=None, to='orm.Build', null=True, on_delete=models.CASCADE)),
('layer', models.ForeignKey(related_name='layer_version_layer', to='orm.Layer', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='LayerSource',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=63)),
('sourcetype', models.IntegerField(choices=[(0, b'local'), (1, b'layerindex'), (2, b'imported')])),
('apiurl', models.CharField(default=None, max_length=255, null=True)),
],
),
migrations.CreateModel(
name='LayerVersionDependency',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('depends_on', models.ForeignKey(related_name='dependees', to='orm.Layer_Version', on_delete=models.CASCADE)),
('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)),
('layer_version', models.ForeignKey(related_name='dependencies', to='orm.Layer_Version', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='LogMessage',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('level', models.IntegerField(default=0, choices=[(0, b'info'), (1, b'warn'), (2, b'error'), (3, b'critical'), (-1, b'toaster exception')])),
('message', models.TextField(null=True, blank=True)),
('pathname', models.FilePathField(max_length=255, blank=True)),
('lineno', models.IntegerField(null=True)),
('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Machine',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('name', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)),
('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)),
('layer_version', models.ForeignKey(to='orm.Layer_Version', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Package',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100)),
('installed_name', models.CharField(default=b'', max_length=100)),
('version', models.CharField(max_length=100, blank=True)),
('revision', models.CharField(max_length=32, blank=True)),
('summary', models.TextField(blank=True)),
('description', models.TextField(blank=True)),
('size', models.IntegerField(default=0)),
('installed_size', models.IntegerField(default=0)),
('section', models.CharField(max_length=80, blank=True)),
('license', models.CharField(max_length=80, blank=True)),
('build', models.ForeignKey(to='orm.Build', null=True, on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Package_Dependency',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('dep_type', models.IntegerField(choices=[(0, b'depends'), (1, b'depends'), (3, b'recommends'), (2, b'recommends'), (4, b'suggests'), (5, b'provides'), (6, b'replaces'), (7, b'conflicts')])),
('depends_on', models.ForeignKey(related_name='package_dependencies_target', to='orm.Package', on_delete=models.CASCADE)),
('package', models.ForeignKey(related_name='package_dependencies_source', to='orm.Package', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Package_File',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('path', models.FilePathField(max_length=255, blank=True)),
('size', models.IntegerField()),
('package', models.ForeignKey(related_name='buildfilelist_package', to='orm.Package', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Project',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100)),
('short_description', models.CharField(max_length=50, blank=True)),
('created', models.DateTimeField(auto_now_add=True)),
('updated', models.DateTimeField(auto_now=True)),
('user_id', models.IntegerField(null=True)),
('is_default', models.BooleanField(default=False)),
('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion', null=True, on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ProjectLayer',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('optional', models.BooleanField(default=True)),
('layercommit', models.ForeignKey(to='orm.Layer_Version', null=True, on_delete=models.CASCADE)),
('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ProjectTarget',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('target', models.CharField(max_length=100)),
('task', models.CharField(max_length=100, null=True)),
('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ProjectVariable',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100)),
('value', models.TextField(blank=True)),
('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Recipe',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('name', models.CharField(max_length=100, blank=True)),
('version', models.CharField(max_length=100, blank=True)),
('summary', models.TextField(blank=True)),
('description', models.TextField(blank=True)),
('section', models.CharField(max_length=100, blank=True)),
('license', models.CharField(max_length=200, blank=True)),
('homepage', models.URLField(blank=True)),
('bugtracker', models.URLField(blank=True)),
('file_path', models.FilePathField(max_length=255)),
('pathflags', models.CharField(max_length=200, blank=True)),
('is_image', models.BooleanField(default=False)),
('layer_source', models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE)),
('layer_version', models.ForeignKey(related_name='recipe_layer_version', to='orm.Layer_Version', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Recipe_Dependency',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('dep_type', models.IntegerField(choices=[(0, b'depends'), (1, b'rdepends')])),
('depends_on', models.ForeignKey(related_name='r_dependencies_depends', to='orm.Recipe', on_delete=models.CASCADE)),
('recipe', models.ForeignKey(related_name='r_dependencies_recipe', to='orm.Recipe', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Release',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=32)),
('description', models.CharField(max_length=255)),
('branch_name', models.CharField(default=b'', max_length=50)),
('helptext', models.TextField(null=True)),
('bitbake_version', models.ForeignKey(to='orm.BitbakeVersion', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ReleaseDefaultLayer',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('layer_name', models.CharField(default=b'', max_length=100)),
('release', models.ForeignKey(to='orm.Release', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ReleaseLayerSourcePriority',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('priority', models.IntegerField(default=0)),
('layer_source', models.ForeignKey(to='orm.LayerSource', on_delete=models.CASCADE)),
('release', models.ForeignKey(to='orm.Release', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Target',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('target', models.CharField(max_length=100)),
('task', models.CharField(max_length=100, null=True)),
('is_image', models.BooleanField(default=False)),
('image_size', models.IntegerField(default=0)),
('license_manifest_path', models.CharField(max_length=500, null=True)),
('build', models.ForeignKey(to='orm.Build', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Target_File',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('path', models.FilePathField()),
('size', models.IntegerField()),
('inodetype', models.IntegerField(choices=[(1, b'regular'), (2, b'directory'), (3, b'symlink'), (4, b'socket'), (5, b'fifo'), (6, b'character'), (7, b'block')])),
('permission', models.CharField(max_length=16)),
('owner', models.CharField(max_length=128)),
('group', models.CharField(max_length=128)),
('directory', models.ForeignKey(related_name='directory_set', to='orm.Target_File', null=True, on_delete=models.CASCADE)),
('sym_target', models.ForeignKey(related_name='symlink_set', to='orm.Target_File', null=True, on_delete=models.CASCADE)),
('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Target_Image_File',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('file_name', models.FilePathField(max_length=254)),
('file_size', models.IntegerField()),
('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Target_Installed_Package',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('package', models.ForeignKey(related_name='buildtargetlist_package', to='orm.Package', on_delete=models.CASCADE)),
('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='Task',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('order', models.IntegerField(null=True)),
('task_executed', models.BooleanField(default=False)),
('outcome', models.IntegerField(default=-1, choices=[(-1, b'Not Available'), (0, b'Succeeded'), (1, b'Covered'), (2, b'Cached'), (3, b'Prebuilt'), (4, b'Failed'), (5, b'Empty')])),
('sstate_checksum', models.CharField(max_length=100, blank=True)),
('path_to_sstate_obj', models.FilePathField(max_length=500, blank=True)),
('task_name', models.CharField(max_length=100)),
('source_url', models.FilePathField(max_length=255, blank=True)),
('work_directory', models.FilePathField(max_length=255, blank=True)),
('script_type', models.IntegerField(default=0, choices=[(0, b'N/A'), (2, b'Python'), (3, b'Shell')])),
('line_number', models.IntegerField(default=0)),
('disk_io', models.IntegerField(null=True)),
('cpu_usage', models.DecimalField(null=True, max_digits=8, decimal_places=2)),
('elapsed_time', models.DecimalField(null=True, max_digits=8, decimal_places=2)),
('sstate_result', models.IntegerField(default=0, choices=[(0, b'Not Applicable'), (1, b'File not in cache'), (2, b'Failed'), (3, b'Succeeded')])),
('message', models.CharField(max_length=240)),
('logfile', models.FilePathField(max_length=255, blank=True)),
('build', models.ForeignKey(related_name='task_build', to='orm.Build', on_delete=models.CASCADE)),
('recipe', models.ForeignKey(related_name='tasks', to='orm.Recipe', on_delete=models.CASCADE)),
],
options={
'ordering': ('order', 'recipe'),
},
),
migrations.CreateModel(
name='Task_Dependency',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('depends_on', models.ForeignKey(related_name='task_dependencies_depends', to='orm.Task', on_delete=models.CASCADE)),
('task', models.ForeignKey(related_name='task_dependencies_task', to='orm.Task', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='ToasterSetting',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=63)),
('helptext', models.TextField()),
('value', models.CharField(max_length=255)),
],
),
migrations.CreateModel(
name='Variable',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('variable_name', models.CharField(max_length=100)),
('variable_value', models.TextField(blank=True)),
('changed', models.BooleanField(default=False)),
('human_readable_name', models.CharField(max_length=200)),
('description', models.TextField(blank=True)),
('build', models.ForeignKey(related_name='variable_build', to='orm.Build', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='VariableHistory',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('value', models.TextField(blank=True)),
('file_name', models.FilePathField(max_length=255)),
('line_number', models.IntegerField(null=True)),
('operation', models.CharField(max_length=64)),
('variable', models.ForeignKey(related_name='vhistory', to='orm.Variable', on_delete=models.CASCADE)),
],
),
migrations.AddField(
model_name='project',
name='release',
field=models.ForeignKey(to='orm.Release', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='package_dependency',
name='target',
field=models.ForeignKey(to='orm.Target', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='package',
name='recipe',
field=models.ForeignKey(to='orm.Recipe', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='logmessage',
name='task',
field=models.ForeignKey(blank=True, to='orm.Task', null=True, on_delete=models.CASCADE),
),
migrations.AlterUniqueTogether(
name='layersource',
unique_together=set([('sourcetype', 'apiurl')]),
),
migrations.AddField(
model_name='layer_version',
name='layer_source',
field=models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='layer_version',
name='project',
field=models.ForeignKey(default=None, to='orm.Project', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='layer_version',
name='up_branch',
field=models.ForeignKey(default=None, to='orm.Branch', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='layer',
name='layer_source',
field=models.ForeignKey(default=None, to='orm.LayerSource', null=True, on_delete=models.CASCADE),
),
migrations.AddField(
model_name='build',
name='project',
field=models.ForeignKey(to='orm.Project', on_delete=models.CASCADE),
),
migrations.AddField(
model_name='branch',
name='layer_source',
field=models.ForeignKey(default=True, to='orm.LayerSource', null=True, on_delete=models.CASCADE),
),
migrations.CreateModel(
name='ImportedLayerSource',
fields=[
],
options={
'proxy': True,
},
bases=('orm.layersource',),
),
migrations.CreateModel(
name='LayerIndexLayerSource',
fields=[
],
options={
'proxy': True,
},
bases=('orm.layersource',),
),
migrations.CreateModel(
name='LocalLayerSource',
fields=[
],
options={
'proxy': True,
},
bases=('orm.layersource',),
),
migrations.AlterUniqueTogether(
name='task',
unique_together=set([('build', 'recipe', 'task_name')]),
),
migrations.AlterUniqueTogether(
name='releaselayersourcepriority',
unique_together=set([('release', 'layer_source')]),
),
migrations.AlterUniqueTogether(
name='recipe',
unique_together=set([('layer_version', 'file_path', 'pathflags')]),
),
migrations.AlterUniqueTogether(
name='projectlayer',
unique_together=set([('project', 'layercommit')]),
),
migrations.AlterUniqueTogether(
name='machine',
unique_together=set([('layer_source', 'up_id')]),
),
migrations.AlterUniqueTogether(
name='layerversiondependency',
unique_together=set([('layer_source', 'up_id')]),
),
migrations.AlterUniqueTogether(
name='layer_version',
unique_together=set([('layer_source', 'up_id')]),
),
migrations.AlterUniqueTogether(
name='layer',
unique_together=set([('layer_source', 'up_id'), ('layer_source', 'name')]),
),
migrations.AlterUniqueTogether(
name='branch',
unique_together=set([('layer_source', 'up_id'), ('layer_source', 'name')]),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='CustomImageRecipe',
fields=[
('recipe_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Recipe', on_delete=models.CASCADE)),
('last_updated', models.DateTimeField(default=None, null=True)),
('base_recipe', models.ForeignKey(related_name='based_on_recipe', to='orm.Recipe', on_delete=models.CASCADE)),
('project', models.ForeignKey(to='orm.Project', on_delete=models.CASCADE)),
],
bases=('orm.recipe',),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0002_customimagerecipe'),
]
operations = [
migrations.CreateModel(
name='CustomImagePackage',
fields=[
('package_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='orm.Package', on_delete=models.CASCADE)),
('recipe_appends', models.ManyToManyField(related_name='appends_set', to='orm.CustomImageRecipe')),
('recipe_excludes', models.ManyToManyField(related_name='excludes_set', to='orm.CustomImageRecipe')),
('recipe_includes', models.ManyToManyField(related_name='includes_set', to='orm.CustomImageRecipe')),
],
bases=('orm.package',),
),
]

View File

@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0003_customimagepackage'),
]
operations = [
migrations.CreateModel(
name='Provides',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=100)),
('recipe', models.ForeignKey(to='orm.Recipe', on_delete=models.CASCADE)),
],
),
migrations.AddField(
model_name='recipe_dependency',
name='via',
field=models.ForeignKey(null=True, default=None, to='orm.Provides', on_delete=models.CASCADE),
),
]

View File

@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0004_provides'),
]
operations = [
migrations.RemoveField(
model_name='task',
name='cpu_usage',
),
migrations.AddField(
model_name='task',
name='cpu_time_system',
field=models.DecimalField(null=True, max_digits=8, decimal_places=2),
),
migrations.AddField(
model_name='task',
name='cpu_time_user',
field=models.DecimalField(null=True, max_digits=8, decimal_places=2),
),
migrations.AddField(
model_name='task',
name='disk_io_read',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='task',
name='disk_io_write',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='task',
name='ended',
field=models.DateTimeField(null=True),
),
migrations.AddField(
model_name='task',
name='started',
field=models.DateTimeField(null=True),
),
]

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0005_task_field_separation'),
]
operations = [
migrations.AlterField(
model_name='build',
name='outcome',
field=models.IntegerField(default=2, choices=[(0, b'Succeeded'), (1, b'Failed'), (2, b'In Progress'), (3, b'Cancelled')]),
),
]

View File

@@ -0,0 +1,89 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0006_add_cancelled_state'),
]
operations = [
migrations.AlterField(
model_name='build',
name='outcome',
field=models.IntegerField(default=2, choices=[(0, 'Succeeded'), (1, 'Failed'), (2, 'In Progress'), (3, 'Cancelled')]),
),
migrations.AlterField(
model_name='helptext',
name='area',
field=models.IntegerField(choices=[(0, 'variable')]),
),
migrations.AlterField(
model_name='layer',
name='summary',
field=models.TextField(default=None, null=True, help_text='One-line description of the layer'),
),
migrations.AlterField(
model_name='layer_version',
name='local_path',
field=models.FilePathField(default='/', max_length=1024),
),
migrations.AlterField(
model_name='layersource',
name='sourcetype',
field=models.IntegerField(choices=[(0, 'local'), (1, 'layerindex'), (2, 'imported')]),
),
migrations.AlterField(
model_name='logmessage',
name='level',
field=models.IntegerField(default=0, choices=[(0, 'info'), (1, 'warn'), (2, 'error'), (3, 'critical'), (-1, 'toaster exception')]),
),
migrations.AlterField(
model_name='package',
name='installed_name',
field=models.CharField(default='', max_length=100),
),
migrations.AlterField(
model_name='package_dependency',
name='dep_type',
field=models.IntegerField(choices=[(0, 'depends'), (1, 'depends'), (3, 'recommends'), (2, 'recommends'), (4, 'suggests'), (5, 'provides'), (6, 'replaces'), (7, 'conflicts')]),
),
migrations.AlterField(
model_name='recipe_dependency',
name='dep_type',
field=models.IntegerField(choices=[(0, 'depends'), (1, 'rdepends')]),
),
migrations.AlterField(
model_name='release',
name='branch_name',
field=models.CharField(default='', max_length=50),
),
migrations.AlterField(
model_name='releasedefaultlayer',
name='layer_name',
field=models.CharField(default='', max_length=100),
),
migrations.AlterField(
model_name='target_file',
name='inodetype',
field=models.IntegerField(choices=[(1, 'regular'), (2, 'directory'), (3, 'symlink'), (4, 'socket'), (5, 'fifo'), (6, 'character'), (7, 'block')]),
),
migrations.AlterField(
model_name='task',
name='outcome',
field=models.IntegerField(default=-1, choices=[(-1, 'Not Available'), (0, 'Succeeded'), (1, 'Covered'), (2, 'Cached'), (3, 'Prebuilt'), (4, 'Failed'), (5, 'Empty')]),
),
migrations.AlterField(
model_name='task',
name='script_type',
field=models.IntegerField(default=0, choices=[(0, 'N/A'), (2, 'Python'), (3, 'Shell')]),
),
migrations.AlterField(
model_name='task',
name='sstate_result',
field=models.IntegerField(default=0, choices=[(0, 'Not Applicable'), (1, 'File not in cache'), (2, 'Failed'), (3, 'Succeeded')]),
),
]

View File

@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0007_auto_20160523_1446'),
]
operations = [
migrations.CreateModel(
name='TargetKernelFile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)),
('file_name', models.FilePathField()),
('file_size', models.IntegerField()),
('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='TargetSDKFile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, verbose_name='ID', serialize=False)),
('file_name', models.FilePathField()),
('file_size', models.IntegerField()),
('target', models.ForeignKey(to='orm.Target', on_delete=models.CASCADE)),
],
),
migrations.RemoveField(
model_name='buildartifact',
name='build',
),
migrations.DeleteModel(
name='BuildArtifact',
),
]

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0008_refactor_artifact_models'),
]
operations = [
migrations.AddField(
model_name='target',
name='package_manifest_path',
field=models.CharField(null=True, max_length=500),
),
]

View File

@@ -0,0 +1,118 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('orm', '0009_target_package_manifest_path'),
]
operations = [
migrations.AlterUniqueTogether(
name='releaselayersourcepriority',
unique_together=set([]),
),
migrations.RemoveField(
model_name='releaselayersourcepriority',
name='layer_source',
),
migrations.RemoveField(
model_name='releaselayersourcepriority',
name='release',
),
migrations.DeleteModel(
name='ImportedLayerSource',
),
migrations.DeleteModel(
name='LayerIndexLayerSource',
),
migrations.DeleteModel(
name='LocalLayerSource',
),
migrations.RemoveField(
model_name='recipe',
name='layer_source',
),
migrations.RemoveField(
model_name='recipe',
name='up_id',
),
migrations.AlterField(
model_name='layer',
name='up_date',
field=models.DateTimeField(default=django.utils.timezone.now, null=True),
),
migrations.AlterField(
model_name='layer_version',
name='layer_source',
field=models.IntegerField(default=0, choices=[(0, 'local'), (1, 'layerindex'), (2, 'imported'), (3, 'build')]),
),
migrations.AlterField(
model_name='layer_version',
name='up_date',
field=models.DateTimeField(default=django.utils.timezone.now, null=True),
),
migrations.AlterUniqueTogether(
name='branch',
unique_together=set([]),
),
migrations.AlterUniqueTogether(
name='layer',
unique_together=set([]),
),
migrations.AlterUniqueTogether(
name='layer_version',
unique_together=set([]),
),
migrations.AlterUniqueTogether(
name='layerversiondependency',
unique_together=set([]),
),
migrations.AlterUniqueTogether(
name='machine',
unique_together=set([]),
),
migrations.DeleteModel(
name='ReleaseLayerSourcePriority',
),
migrations.RemoveField(
model_name='branch',
name='layer_source',
),
migrations.RemoveField(
model_name='branch',
name='up_id',
),
migrations.RemoveField(
model_name='layer',
name='layer_source',
),
migrations.RemoveField(
model_name='layer',
name='up_id',
),
migrations.RemoveField(
model_name='layer_version',
name='up_id',
),
migrations.RemoveField(
model_name='layerversiondependency',
name='layer_source',
),
migrations.RemoveField(
model_name='layerversiondependency',
name='up_id',
),
migrations.RemoveField(
model_name='machine',
name='layer_source',
),
migrations.RemoveField(
model_name='machine',
name='up_id',
),
]

View File

@@ -0,0 +1,17 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('orm', '0010_delete_layer_source_references'),
]
operations = [
migrations.DeleteModel(
name='LayerSource',
),
]

View File

@@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
from django.db.models import Q
def branch_to_release(apps, schema_editor):
Layer_Version = apps.get_model('orm', 'Layer_Version')
Release = apps.get_model('orm', 'Release')
print("Converting all layer version up_branches to releases")
# Find all the layer versions which have an upbranch and convert them to
# the release that they're for.
for layer_version in Layer_Version.objects.filter(
Q(release=None) & ~Q(up_branch=None)):
try:
# HEAD and local are equivalent
if "HEAD" in layer_version.up_branch.name:
release = Release.objects.get(name="local")
layer_version.commit = "HEAD"
layer_version.branch = "HEAD"
else:
release = Release.objects.get(
name=layer_version.up_branch.name)
layer_version.release = release
layer_version.save()
except Exception as e:
print("Couldn't work out an appropriate release for %s "
"the up_branch was %s "
"user the django admin interface to correct it" %
(layer_version.layer.name, layer_version.up_branch.name))
print(e)
continue
class Migration(migrations.Migration):
dependencies = [
('orm', '0011_delete_layersource'),
]
operations = [
migrations.AddField(
model_name='layer_version',
name='release',
field=models.ForeignKey(to='orm.Release', default=None, null=True, on_delete=models.CASCADE),
),
migrations.RunPython(branch_to_release,
reverse_code=migrations.RunPython.noop),
migrations.RemoveField(
model_name='layer_version',
name='up_branch',
),
migrations.DeleteModel(
name='Branch',
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0012_use_release_instead_of_up_branch'),
]
operations = [
migrations.AddField(
model_name='build',
name='recipes_parsed',
field=models.IntegerField(default=0),
),
migrations.AddField(
model_name='build',
name='recipes_to_parse',
field=models.IntegerField(default=1),
),
]

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0013_recipe_parse_progress_fields'),
]
operations = [
migrations.AlterField(
model_name='build',
name='build_name',
field=models.CharField(default='', max_length=100),
),
]

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0014_allow_empty_buildname'),
]
operations = [
migrations.AddField(
model_name='layer',
name='local_source_dir',
field=models.TextField(null=True, default=None),
),
]

View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0015_layer_local_source_dir'),
]
operations = [
migrations.AddField(
model_name='build',
name='repos_cloned',
field=models.IntegerField(default=1),
),
migrations.AddField(
model_name='build',
name='repos_to_clone',
field=models.IntegerField(default=1), # (default off)
),
]

View File

@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0016_clone_progress'),
]
operations = [
migrations.CreateModel(
name='Distro',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('up_id', models.IntegerField(default=None, null=True)),
('up_date', models.DateTimeField(default=None, null=True)),
('name', models.CharField(max_length=255)),
('description', models.CharField(max_length=255)),
('layer_version', models.ForeignKey(to='orm.Layer_Version', on_delete=models.CASCADE)),
],
),
]

View File

@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('orm', '0017_distro_clone'),
]
operations = [
migrations.AddField(
model_name='Project',
name='builddir',
field=models.TextField(),
),
migrations.AddField(
model_name='Project',
name='merged_attr',
field=models.BooleanField(default=False)
),
migrations.AddField(
model_name='Build',
name='progress_item',
field=models.CharField(max_length=40)
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 2.2.7 on 2019-11-19 03:38
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('orm', '0018_project_specific'),
]
operations = [
migrations.RemoveField(
model_name='distro',
name='up_id',
),
migrations.AlterField(
model_name='build',
name='recipes_parsed',
field=models.IntegerField(default=1),
),
]

View File

@@ -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'),
),
]

View File

@@ -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)),
],
),
]

File diff suppressed because it is too large Load Diff