[bitbake-devel] bitbake: cooker: list all nonexistent bblayer directories

Submitted by Oleksandr Kravchuk on June 14, 2019, 12:09 a.m. | Patch ID: 162192

Details

Message ID 20190614000925.12048-1-open.source@oleksandr-kravchuk.com
State New
Headers show

Commit Message

Oleksandr Kravchuk June 14, 2019, 12:09 a.m.
Check existence of all the bblayer direcotories at once and print them
all, so if there are multiple nonexistent directories, user does not
have to correct bblayers.conf and restart bitbake multiple times.

[YOCTO #11647]

Signed-off-by: Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>
---
 bitbake/lib/bb/cookerdata.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
index f8ae41093b..842275d530 100644
--- a/bitbake/lib/bb/cookerdata.py
+++ b/bitbake/lib/bb/cookerdata.py
@@ -342,14 +342,24 @@  class CookerDataBuilder(object):
             data = parse_config_file(layerconf, data)
 
             layers = (data.getVar('BBLAYERS') or "").split()
+            broken_layers = []
 
             data = bb.data.createCopy(data)
             approved = bb.utils.approved_variables()
+
+            # Check whether present layer directories exist
             for layer in layers:
                 if not os.path.isdir(layer):
-                    parselog.critical("Layer directory '%s' does not exist! "
-                                      "Please check BBLAYERS in %s" % (layer, layerconf))
-                    sys.exit(1)
+                    broken_layers.append(layer)
+
+            if broken_layers:
+                parselog.critical("The following layer directories do not exist:")
+                for layer in broken_layers:
+                    parselog.critical("   %s", layer)
+                parselog.critical("Please check BBLAYERS in %s" % (layerconf))
+                sys.exit(1)
+
+            for layer in layers:
                 parselog.debug(2, "Adding layer %s", layer)
                 if 'HOME' in approved and '~' in layer:
                     layer = os.path.expanduser(layer)

Comments

Oleksandr Kravchuk June 14, 2019, 12:09 a.m.
This is how log will look like:

ERROR: Unable to start bitbake server (None)
ERROR: Server log for this session
(/home/sashko/projects/yocto/open-embedded/build/bitbake-cookerdaemon.log):
--- Starting bitbake server pid 11745 at 2019-06-14 02:08:15.687299 ---
ERROR: The following layer directories do not exist:
ERROR:    /home/sashko/projects/yocto/open-embedded/sources/poky/meta-abc
ERROR:    /home/sashko/projects/yocto/open-embedded/sources/poky/meta-xyz
ERROR: Please check BBLAYERS in
/home/sashko/projects/yocto/open-embedded/build/conf/bblayers.conf

On 14/06/2019 02:09, Oleksandr Kravchuk wrote:
> Check existence of all the bblayer direcotories at once and print them
> all, so if there are multiple nonexistent directories, user does not
> have to correct bblayers.conf and restart bitbake multiple times.
>
> [YOCTO #11647]
>
> Signed-off-by: Oleksandr Kravchuk <open.source@oleksandr-kravchuk.com>
> ---
>  bitbake/lib/bb/cookerdata.py | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/bitbake/lib/bb/cookerdata.py b/bitbake/lib/bb/cookerdata.py
> index f8ae41093b..842275d530 100644
> --- a/bitbake/lib/bb/cookerdata.py
> +++ b/bitbake/lib/bb/cookerdata.py
> @@ -342,14 +342,24 @@ class CookerDataBuilder(object):
>              data = parse_config_file(layerconf, data)
>  
>              layers = (data.getVar('BBLAYERS') or "").split()
> +            broken_layers = []
>  
>              data = bb.data.createCopy(data)
>              approved = bb.utils.approved_variables()
> +
> +            # Check whether present layer directories exist
>              for layer in layers:
>                  if not os.path.isdir(layer):
> -                    parselog.critical("Layer directory '%s' does not exist! "
> -                                      "Please check BBLAYERS in %s" % (layer, layerconf))
> -                    sys.exit(1)
> +                    broken_layers.append(layer)
> +
> +            if broken_layers:
> +                parselog.critical("The following layer directories do not exist:")
> +                for layer in broken_layers:
> +                    parselog.critical("   %s", layer)
> +                parselog.critical("Please check BBLAYERS in %s" % (layerconf))
> +                sys.exit(1)
> +
> +            for layer in layers:
>                  parselog.debug(2, "Adding layer %s", layer)
>                  if 'HOME' in approved and '~' in layer:
>                      layer = os.path.expanduser(layer)
Richard Purdie June 18, 2019, 3:58 p.m.
On Fri, 2019-06-14 at 02:09 +0200, Oleksandr Kravchuk wrote:
> This is how log will look like:
> 
> ERROR: Unable to start bitbake server (None)
> ERROR: Server log for this session
> (/home/sashko/projects/yocto/open-embedded/build/bitbake-
> cookerdaemon.log):
> --- Starting bitbake server pid 11745 at 2019-06-14 02:08:15.687299
> ---
> ERROR: The following layer directories do not exist:
> ERROR:    /home/sashko/projects/yocto/open-
> embedded/sources/poky/meta-abc
> ERROR:    /home/sashko/projects/yocto/open-
> embedded/sources/poky/meta-xyz
> ERROR: Please check BBLAYERS in
> /home/sashko/projects/yocto/open-embedded/build/conf/bblayers.conf

Looks good to me, I've merged this thanks!

Cheers,

Richard