diff mbox series

[layerindex-web] update_layer.py: checkout dep layers as well

Message ID 20231110232708.339590-1-tim.orling@konsulko.com
State New
Headers show
Series [layerindex-web] update_layer.py: checkout dep layers as well | expand

Commit Message

Tim Orling Nov. 10, 2023, 11:27 p.m. UTC
We have never been checking out dependent layers at the same
release/branch. With the introduction of 'addpylib', this
became obvious due to parsing errors.

Ensure that known LayerDependency objects are checked out at
the expected branch/release. Since openembedded-core has already
been handled elsewhere, we skip it.

[YOCTO #15236]

Signed-off-by: Tim Orling <tim.orling@konsulko.com>
---
 layerindex/update_layer.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/layerindex/update_layer.py b/layerindex/update_layer.py
index e0ecc94..6d73fad 100644
--- a/layerindex/update_layer.py
+++ b/layerindex/update_layer.py
@@ -293,7 +293,7 @@  def main():
 
     utils.setup_django()
     import settings
-    from layerindex.models import LayerItem, LayerBranch, Recipe, RecipeFileDependency, Machine, Distro, BBAppend, BBClass, IncFile
+    from layerindex.models import LayerItem, LayerBranch, LayerDependency, Recipe, RecipeFileDependency, Machine, Distro, BBAppend, BBClass, IncFile
     from django.db import transaction
 
     logger.setLevel(options.loglevel)
@@ -374,10 +374,25 @@  def main():
             layerappends = BBAppend.objects.filter(layerbranch=layerbranch)
             layerclasses = BBClass.objects.filter(layerbranch=layerbranch)
             layerincfiles = IncFile.objects.filter(layerbranch=layerbranch)
+            layerdependencies = LayerDependency.objects.filter(layerbranch=layerbranch)
             if layerbranch.vcs_last_rev != topcommit.hexsha or options.reload or options.initial:
                 # Check out appropriate branch
                 if not options.nocheckout:
                     utils.checkout_layer_branch(layerbranch, repodir, logger=logger)
+                    # Ensure dependent layers are checked out at the same release
+                    for layerdependency in layerdependencies:
+                        logger.debug("layerdependency: %s" % layerdependency)
+                        try:
+                            # bitbake and openembedded-core are handled elsewhere
+                            if layerdependency.dependency == 'openembedded-core':
+                                continue
+                            dep_layer = utils.get_layer(layerdependency.dependency)
+                            dep_layerbranch = dep_layer.get_layerbranch(options.branch)
+                            dep_urldir = dep_layer.get_fetch_dir()
+                            dep_repodir = os.path.join(fetchdir, dep_urldir)
+                            utils.checkout_layer_branch(dep_layerbranch, dep_repodir, logger=logger)
+                        except Exception as e:
+                            logger.warn("Unable to checkout dependent layer %s - %s" % (layerdependency.dependency, str(e)))
 
                 logger.info("Collecting data for layer %s on branch %s" % (layer.name, branchdesc))
                 try: