[yocto] [layerindex-web] update: Parse the layer's compatible version info

Kevin Hao kexin.hao at windriver.com
Tue Oct 16 23:23:38 PDT 2018


We have already set the layer's compatible version info in the
layer.conf, but we lack this info in the layerindex database.
Add support to parse this info and set it in the corresponding tables.
We plan to use this to filter the layerindex results.

Signed-off-by: Kevin Hao <kexin.hao at windriver.com>
---
 layerindex/update.py       |  9 +++++++++
 layerindex/update_layer.py | 23 ++++++++++++++++++++++-
 2 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/layerindex/update.py b/layerindex/update.py
index 0b0f4804bba5..1610ae7989da 100755
--- a/layerindex/update.py
+++ b/layerindex/update.py
@@ -127,6 +127,13 @@ def extract_value(valuename, output):
     else:
         return ''
 
+def delete_dangling_ypcompatibleversion():
+    from layerindex.models import LayerBranch, YPCompatibleVersion
+
+    for ypcv in YPCompatibleVersion.objects.all():
+        if not LayerBranch.objects.filter(yp_compatible_version=ypcv):
+            ypcv.delete()
+
 def main():
     if LooseVersion(git.__version__) < '0.3.1':
         logger.error("Version of GitPython is too old, please install GitPython (python-git) 0.3.1 or later in order to use this script")
@@ -574,6 +581,8 @@ def main():
             update.save()
 
     if not options.dryrun:
+        delete_dangling_ypcompatibleversion()
+
         # Purge old update records
         update_purge_days = getattr(settings, 'UPDATE_PURGE_DAYS', 30)
         Update.objects.filter(started__lte=datetime.now()-timedelta(days=update_purge_days)).delete()
diff --git a/layerindex/update_layer.py b/layerindex/update_layer.py
index 42b618ff5944..9140ec4c2ed1 100644
--- a/layerindex/update_layer.py
+++ b/layerindex/update_layer.py
@@ -292,6 +292,26 @@ def update_distro_conf_file(path, distro, d):
     else:
         distro.description = desc
 
+def get_yp_compatible_version(layer_config_data):
+    vers = utils.get_layer_var(layer_config_data, 'LAYERSERIES_COMPAT', logger)
+    if not vers:
+        return None;
+
+    vers = vers.split()
+    vers.sort()
+    vers = ' '.join(vers)
+
+    from layerindex.models import YPCompatibleVersion
+    ypcv = YPCompatibleVersion.objects.filter(name=vers)
+    if ypcv:
+        ypcv = ypcv[0]
+    else:
+        ypcv = YPCompatibleVersion()
+        ypcv.name = vers
+        ypcv.save()
+
+    return ypcv
+
 def main():
     if LooseVersion(git.__version__) < '0.3.1':
         logger.error("Version of GitPython is too old, please install GitPython (python-git) 0.3.1 or later in order to use this script")
@@ -347,7 +367,7 @@ def main():
 
     utils.setup_django()
     import settings
-    from layerindex.models import LayerItem, LayerBranch, Recipe, RecipeFileDependency, Machine, Distro, BBAppend, BBClass
+    from layerindex.models import LayerItem, LayerBranch, Recipe, RecipeFileDependency, Machine, Distro, BBAppend, BBClass, YPCompatibleVersion
     from django.db import transaction
 
     logger.setLevel(options.loglevel)
@@ -465,6 +485,7 @@ def main():
                     logger.warn('Failed to find lib/oe/recipeutils.py in layers - patch information will not be collected')
                     skip_patches = True
 
+                layerbranch.yp_compatible_version = get_yp_compatible_version(layer_config_data)
                 utils.add_dependencies(layerbranch, layer_config_data, logger=logger)
                 utils.add_recommends(layerbranch, layer_config_data, logger=logger)
                 layerbranch.save()
-- 
2.14.4



More information about the yocto mailing list