[oe-commits] [openembedded-core] 01/14: checklayer: avoid recursive loop in add_layer_dependencies

git at git.openembedded.org git at git.openembedded.org
Thu Oct 18 10:10:15 UTC 2018


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

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

commit 759290ed5fedc1ce10639b3584d4532d688ea714
Author: Nicolas Dechesne <nicolas.dechesne at linaro.org>
AuthorDate: Tue Oct 2 23:54:45 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>
    (cherry picked from commit 171900b4bcb06416685ce90b63114a10fefe0b94)
    Signed-off-by: Armin Kuster <akuster808 at gmail.com>
---
 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