diff options
| -rw-r--r-- | bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py | 37 |
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 @@ | |||
| 1 | from django.core.management.base import BaseCommand, CommandError | 1 | from django.core.management.base import BaseCommand, CommandError |
| 2 | from orm.models import LayerSource, ToasterSetting, Branch, Layer, Layer_Version | 2 | from orm.models import LayerSource, ToasterSetting, Branch, Layer, Layer_Version |
| 3 | from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer, ReleaseLayerSourcePriority | 3 | from orm.models import BitbakeVersion, Release, ReleaseDefaultLayer, ReleaseLayerSourcePriority |
| 4 | from django.db import IntegrityError | ||
| 4 | import os | 5 | import os |
| 5 | 6 | ||
| 6 | from checksettings import DN | 7 | from checksettings import DN |
| 7 | 8 | ||
| 9 | import logging | ||
| 10 | logger = logging.getLogger("toaster") | ||
| 11 | |||
| 8 | def _reduce_canon_path(path): | 12 | def _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: |
