summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py')
-rw-r--r--bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py37
1 files changed, 23 insertions, 14 deletions
diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
index 9163e9bf11..5022b59400 100644
--- a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
+++ b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
@@ -1,10 +1,14 @@
1from django.core.management.base import BaseCommand, CommandError 1from django.core.management.base import BaseCommand, CommandError
2from orm.models import LayerSource, ToasterSetting, Branch, Layer, Layer_Version 2from orm.models import LayerSource, ToasterSetting, Branch, Layer, Layer_Version
3from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer, ReleaseLayerSourcePriority 3from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer, ReleaseLayerSourcePriority
4from django.db import IntegrityError
4import os 5import os
5 6
6from checksettings import DN 7from checksettings import DN
7 8
9import logging
10logger = logging.getLogger("toaster")
11
8def _reduce_canon_path(path): 12def _reduce_canon_path(path):
9 components = [] 13 components = []
10 for c in path.split("/"): 14 for c in path.split("/"):
@@ -34,7 +38,7 @@ class Command(BaseCommand):
34 if not os.path.exists(filepath) or not os.path.isfile(filepath): 38 if not os.path.exists(filepath) or not os.path.isfile(filepath):
35 raise Exception("Failed to find toaster config file %s ." % filepath) 39 raise Exception("Failed to find toaster config file %s ." % filepath)
36 40
37 import json, pprint 41 import json
38 data = json.loads(open(filepath, "r").read()) 42 data = json.loads(open(filepath, "r").read())
39 43
40 # verify config file validity before updating settings 44 # verify config file validity before updating settings
@@ -49,7 +53,7 @@ class Command(BaseCommand):
49 cmd = subprocess.Popen("git remote -v", shell=True, cwd = os.path.dirname(filepath), stdout=subprocess.PIPE, stderr = subprocess.PIPE) 53 cmd = subprocess.Popen("git remote -v", shell=True, cwd = os.path.dirname(filepath), stdout=subprocess.PIPE, stderr = subprocess.PIPE)
50 (out,err) = cmd.communicate() 54 (out,err) = cmd.communicate()
51 if cmd.returncode != 0: 55 if cmd.returncode != 0:
52 raise Exception("Error while importing layer vcs_url: git error: %s" % err) 56 logging.warning("Error while importing layer vcs_url: git error: %s" % err)
53 for line in out.split("\n"): 57 for line in out.split("\n"):
54 try: 58 try:
55 (name, path) = line.split("\t", 1) 59 (name, path) = line.split("\t", 1)
@@ -59,16 +63,20 @@ class Command(BaseCommand):
59 except ValueError: 63 except ValueError:
60 pass 64 pass
61 if url == None: 65 if url == None:
62 raise Exception("Error while looking for remote \"%s\" in \"%s\"" % (remote_name, out)) 66 logging.warning("Error while looking for remote \"%s\" in \"%s\"" % (remote_name, out))
63 return url 67 return url
64 68
65 69
66 # import bitbake data 70 # import bitbake data
67 for bvi in data['bitbake']: 71 for bvi in data['bitbake']:
68 bvo, created = BitbakeVersion.objects.get_or_create(name=bvi['name']) 72 bvo, created = BitbakeVersion.objects.get_or_create(name=bvi['name'])
69 bvo.giturl = bvi['giturl']
70 if bvi['giturl'].startswith("remote:"): 73 if bvi['giturl'].startswith("remote:"):
71 bvo.giturl = _read_git_url_from_local_repository(bvi['giturl']) 74 bvo.giturl = _read_git_url_from_local_repository(bvi['giturl'])
75 if bvo.giturl is None:
76 logger.error("The toaster config file references the local git repo, but Toaster cannot detect it.\nYour local configuration for bitbake version %s is invalid. Make sure that the toasterconf.json file is correct." % bvi['name'])
77
78 if bvo.giturl is None:
79 bvo.giturl = bvi['giturl']
72 bvo.branch = bvi['branch'] 80 bvo.branch = bvi['branch']
73 bvo.dirpath = bvi['dirpath'] 81 bvo.dirpath = bvi['dirpath']
74 bvo.save() 82 bvo.save()
@@ -89,13 +97,12 @@ class Command(BaseCommand):
89 assert ((_get_id_for_sourcetype(lsi['sourcetype']) == LayerSource.TYPE_LAYERINDEX) or apiurl.startswith("/")), (lsi['sourcetype'],apiurl) 97 assert ((_get_id_for_sourcetype(lsi['sourcetype']) == LayerSource.TYPE_LAYERINDEX) or apiurl.startswith("/")), (lsi['sourcetype'],apiurl)
90 98
91 try: 99 try:
92 ls = LayerSource.objects.get(sourcetype = _get_id_for_sourcetype(lsi['sourcetype']), apiurl = apiurl) 100 ls, created = LayerSource.objects.get_or_create(sourcetype = _get_id_for_sourcetype(lsi['sourcetype']), apiurl = apiurl)
93 except LayerSource.DoesNotExist: 101 ls.name = lsi['name']
94 ls = LayerSource.objects.create( 102 ls.save()
95 name = lsi['name'], 103 except IntegrityError as e:
96 sourcetype = _get_id_for_sourcetype(lsi['sourcetype']), 104 logger.warning("IntegrityError %s \nWhile setting name %s for layer source %s " % (e, lsi['name'], ls))
97 apiurl = apiurl 105
98 )
99 106
100 layerbranches = [] 107 layerbranches = []
101 for branchname in lsi['branches']: 108 for branchname in lsi['branches']:
@@ -111,12 +118,14 @@ class Command(BaseCommand):
111 lo.local_path = _reduce_canon_path(os.path.join(ls.apiurl, layerinfo['local_path'])) 118 lo.local_path = _reduce_canon_path(os.path.join(ls.apiurl, layerinfo['local_path']))
112 119
113 if not os.path.exists(lo.local_path): 120 if not os.path.exists(lo.local_path):
114 raise Exception("Local layer path %s must exists." % lo.local_path) 121 logger.error("Local layer path %s must exists. Are you trying to import a layer that does not exist ? Check your local toasterconf.json" % lo.local_path)
115 122
116 lo.vcs_url = layerinfo['vcs_url']
117 if layerinfo['vcs_url'].startswith("remote:"): 123 if layerinfo['vcs_url'].startswith("remote:"):
118 lo.vcs_url = _read_git_url_from_local_repository(layerinfo['vcs_url']) 124 lo.vcs_url = _read_git_url_from_local_repository(layerinfo['vcs_url'])
119 else: 125 if lo.vcs_url is None:
126 logger.error("The toaster config file references the local git repo, but Toaster cannot detect it.\nYour local configuration for layer %s is invalid. Make sure that the toasterconf.json file is correct." % layerinfo['name'])
127
128 if lo.vcs_url is None:
120 lo.vcs_url = layerinfo['vcs_url'] 129 lo.vcs_url = layerinfo['vcs_url']
121 130
122 if 'layer_index_url' in layerinfo: 131 if 'layer_index_url' in layerinfo: