[oe-commits] [openembedded-core] 03/05: checklayer: avoid recursive loop in add_layer_dependencies

git at git.openembedded.org git at git.openembedded.org
Tue Sep 25 10:17:53 UTC 2018


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 56377436b5d9cbe3a38038af434a16ead12e803a
Author: Nicolas Dechesne <nicolas.dechesne at linaro.org>
AuthorDate: Mon Sep 24 17:07:54 2018 +0200

    checklayer: avoid recursive loop in add_layer_dependencies
    
    When Layer A and Layer B depend on each other, then we will end up in a
    recursive loop in function recurse_dependencies(). To avoid such situation
    before making the recursive function call we check whether or not we have
    already processed this layer.
    
    e.g. without this patch, running this script on layers with dependency loops, we are seeing:
    
    $ yocto-check-layer -d  /srv/work/oe/meta-openembedded/
    INFO: Detected layers:
    INFO: meta-python: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-python
    INFO: meta-filesystems: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-filesystems
    INFO: meta-gnome: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-gnome
    INFO: meta-xfce: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-xfce
    INFO: meta-networking: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-networking
    INFO: meta-initramfs: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-initramfs
    INFO: meta-oe: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-oe
    INFO: meta-multimedia: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-multimedia
    INFO: meta-perl: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-perl
    INFO: meta-webserver: LayerType.SOFTWARE, /srv/work/oe/meta-openembedded/meta-webserver
    INFO:
    INFO: Setting up for meta-python(LayerType.SOFTWARE), /srv/work/oe/meta-openembedded/meta-python
    DEBUG: Processing dependencies core openembedded-layer for layer meta-python.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    DEBUG: Processing dependencies core networking-layer for layer meta-oe.
    DEBUG: Processing dependencies core openembedded-layer meta-python for layer meta-networking.
    ...
    ...
    ...
    [keep repeating]
    
    This patch fixes this situation.
    
    Signed-off-by: Nicolas Dechesne <nicolas.dechesne at linaro.org>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 scripts/lib/checklayer/__init__.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/lib/checklayer/__init__.py b/scripts/lib/checklayer/__init__.py
index 2618416..7788041 100644
--- a/scripts/lib/checklayer/__init__.py
+++ b/scripts/lib/checklayer/__init__.py
@@ -167,6 +167,10 @@ def add_layer_dependencies(bblayersconf, layer, layers, logger):
             # multiple errors at once
             if ret is not None and layer_depend not in ret:
                 ret.append(layer_depend)
+            else:
+                # we might have processed this dependency already, in which case
+                # we should not do it again (avoid recursive loop)
+                continue
 
             # Recursively process...
             if 'collections' not in layer_depend:

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list