[bitbake-devel] [PATCH][v2 10/10] toaster: loadconf Partially add back some of the layerSource parsing

Elliot Smith elliot.smith at intel.com
Thu Jul 21 13:43:32 UTC 2016


From: Michael Wood <michael.g.wood at intel.com>

Partially add back a revised version of the layersource handling so that
we can continue to support the old toasterconf.json and it's setup of
the local project.

Signed-off-by: Michael Wood <michael.g.wood at intel.com>
Signed-off-by: Elliot Smith <elliot.smith at intel.com>
---
 .../bldcontrol/management/commands/loadconf.py     | 85 +++++++++++++++++++++-
 1 file changed, 82 insertions(+), 3 deletions(-)

diff --git a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
index 59324ac..4f8c9c6 100644
--- a/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
+++ b/bitbake/lib/toaster/bldcontrol/management/commands/loadconf.py
@@ -9,6 +9,20 @@ from .checksettings import DN
 import logging
 logger = logging.getLogger("toaster")
 
+# Temporary old code to support old toasterconf.json
+def _reduce_canon_path(path):
+    components = []
+    for c in path.split("/"):
+        if c == "..":
+            del components[-1]
+        elif c == ".":
+            pass
+        else:
+            components.append(c)
+    if len(components) < 2:
+        components.append('')
+    return "/".join(components)
+# End temp code
 
 class Command(BaseCommand):
     help = "Loads a toasterconf.json file in the database"
@@ -76,6 +90,74 @@ class Command(BaseCommand):
                 # find layers with the same name
                 ReleaseDefaultLayer.objects.get_or_create( release = ro, layer_name = dli)
 
+        # NOTE Temporary old code to handle old toasterconf.json. All this to
+        # be removed after rewrite of config loading mechanism
+        for lsi in data['layersources']:
+            assert 'sourcetype' in lsi
+            assert 'apiurl' in lsi
+            assert 'name' in lsi
+            assert 'branches' in lsi
+
+            if "local" in lsi['sourcetype']:
+                ls = LayerSource.TYPE_LOCAL
+            else:
+                ls = LayerSource.TYPE_LAYERINDEX
+
+            layer_releases = []
+            for branchname in lsi['branches']:
+                try:
+                    release = Release.objects.get(branch_name=branchname)
+                    layer_releases.append(release)
+                except Release.DoesNotExist:
+                    logger.error("Layer set for %s but no release matches this"
+                                 "in the config" % branchname)
+
+            apiurl = _reduce_canon_path(
+                os.path.join(DN(os.path.abspath(filepath)), lsi['apiurl']))
+
+            if 'layers' in lsi:
+                for layerinfo in lsi['layers']:
+                    lo, created = Layer.objects.get_or_create(
+                        name=layerinfo['name'],
+                        vcs_url=layerinfo['vcs_url'],
+                    )
+                    if layerinfo['local_path'].startswith("/"):
+                        lo.local_path = layerinfo['local_path']
+                    else:
+                        lo.local_path = _reduce_canon_path(
+                            os.path.join(apiurl, layerinfo['local_path']))
+
+                    if layerinfo['vcs_url'].startswith("remote:"):
+                        lo.vcs_url = _read_git_url_from_local_repository(
+                            layerinfo['vcs_url'])
+                        if lo.vcs_url is None:
+                            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'])
+
+                    if lo.vcs_url is None:
+                        lo.vcs_url = layerinfo['vcs_url']
+
+                    if 'layer_index_url' in layerinfo:
+                        lo.layer_index_url = layerinfo['layer_index_url']
+                    lo.save()
+
+                    for release in layer_releases:
+                        lvo, created = Layer_Version.objects.get_or_create(
+                            layer_source=ls,
+                            release=release,
+                            commit=release.branch_name,
+                            branch=release.branch_name,
+                            layer=lo)
+                        lvo.dirpath = layerinfo['dirpath']
+                        lvo.save()
+        # END temporary code
+
+
         # set default release
         if ToasterSetting.objects.filter(name = "DEFAULT_RELEASE").count() > 0:
             ToasterSetting.objects.filter(name = "DEFAULT_RELEASE").update(value = data['defaultrelease'])
@@ -95,6 +177,3 @@ class Command(BaseCommand):
             raise CommandError("Need a path to the toasterconf.json file")
         filepath = args[0]
         self._import_layer_config(filepath)
-
-
-
-- 
2.7.4




More information about the bitbake-devel mailing list