bitbake: toaster: checksettings call django's loaddata instead of custom command

Call django's inbuilt loaddata command to load the appropriate fixtures.
We also attempt to load a fixture called "custom" and fail silently if
we don't have one. This is where initial customisations can be done to
load particular settings or data into Toaster (for example layers or
default values for variables)

Make sure the value for TEMPLATECONF is available to checksettings so
that we can have a go a working out which default data to load.

(Bitbake rev: 7d14ca8cbabbb893e507a66e4cc6e3e77c1e8c84)

Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Michael Wood 2016-08-01 19:32:53 +01:00 committed by Richard Purdie
parent 72fa18fb35
commit 33a4006529
2 changed files with 46 additions and 12 deletions

View File

@ -59,7 +59,8 @@ webserverStartAll()
echo "Failed migrations, aborting system start" 1>&2 echo "Failed migrations, aborting system start" 1>&2
return $retval return $retval
fi fi
# Make sure that checksettings can pick up any value for TEMPLATECONF
export TEMPLATECONF
$MANAGE checksettings --traceback || retval=1 $MANAGE checksettings --traceback || retval=1
if [ $retval -eq 1 ]; then if [ $retval -eq 1 ]; then

View File

@ -1,10 +1,15 @@
from django.core.management.base import NoArgsCommand, CommandError from django.core.management.base import NoArgsCommand, CommandError
from django.db import transaction from django.db import transaction
from django.core.management import call_command
from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException from bldcontrol.bbcontroller import getBuildEnvironmentController, ShellCmdException
from bldcontrol.models import BuildRequest, BuildEnvironment, BRError from bldcontrol.models import BuildRequest, BuildEnvironment, BRError
from orm.models import ToasterSetting, Build from orm.models import ToasterSetting, Build, Layer
import os import os
import traceback import traceback
import warnings
def DN(path): def DN(path):
if path is None: if path is None:
@ -94,30 +99,58 @@ class Command(NoArgsCommand):
print("\n -- Validation: The build directory must to be set to an absolute path.") print("\n -- Validation: The build directory must to be set to an absolute path.")
is_changed = _update_builddir() is_changed = _update_builddir()
if is_changed: if is_changed:
print("\nBuild configuration saved") print("\nBuild configuration saved")
be.save() be.save()
return True return True
if be.needs_import: if be.needs_import:
try: try:
config_file = os.environ.get('TOASTER_CONF') print("Loading default settings")
print("\nImporting file: %s" % config_file) call_command("loaddata", "settings")
from .loadconf import Command as LoadConfigCommand template_conf = os.environ.get("TEMPLATECONF", "")
if "poky" in template_conf:
print("Loading poky configuration")
call_command("loaddata", "poky")
else:
print("Loading OE-Core configuration")
call_command("loaddata", "oe-core")
if template_conf:
oe_core_path = os.realpath(template_conf +
"/../")
else:
print("TEMPLATECONF not found. You may have to"
" manually configure layer paths")
oe_core_path = input("Please enter the path of"
" your openembedded-core "
"layer: ")
# Update the layer instances of openemebedded-core
for layer in Layer.objects.filter(
name="openembedded-core"):
layer.local_source_dir = oe_core_path
layer.save()
# Import the custom fixture if it's present
with warnings.catch_warnings():
warnings.filterwarnings(
action="ignore",
message="^.*No fixture named.*$")
print("Importing custom settings if present")
call_command("loaddata", "custom")
LoadConfigCommand()._import_layer_config(config_file)
# we run lsupdates after config update # we run lsupdates after config update
print("\nLayer configuration imported. Updating information from the layer sources, please wait.\nYou can re-update any time later by running bitbake/lib/toaster/manage.py lsupdates") print("\nFetching information from the layer index, "
from django.core.management import call_command "please wait.\nYou can re-update any time later "
"by running bitbake/lib/toaster/manage.py "
"lsupdates\n")
call_command("lsupdates") call_command("lsupdates")
# we don't look for any other config files # we don't look for any other config files
return is_changed return is_changed
except Exception as e: except Exception as e:
print("Failure while trying to import the toaster config file %s: %s" %\ print("Failure while trying to setup toaster: %s"
(config_file, e)) % e)
traceback.print_exc() traceback.print_exc()
return is_changed return is_changed