diff mbox series

[v3,1/2] cargo-update-recipe-crates: Don't fail for partially empty Cargo.lock

Message ID 20251217130644.2710575-1-m.schwan@phytec.de
State New
Headers show
Series [v3,1/2] cargo-update-recipe-crates: Don't fail for partially empty Cargo.lock | expand

Commit Message

Martin Schwan Dec. 17, 2025, 1:06 p.m. UTC
Do not fail if only some Cargo.lock files are empty. Only fail, if there
are absolutely no dependencies found in any Cargo.lock.

This fixes the following error message, which would occur with "bitbake
-c update_crates python3-orjson":

    ERROR: python3-orjson-3.10.17-r0 do_update_crates: Execution of '.../python3-orjson/3.10.17/temp/run.do_update_crates.70693' failed with exit code 1
    ERROR: Logfile of failure stored in: .../python3-orjson/3.10.17/temp/log.do_update_crates.70693
    Log data follows:
    | DEBUG: Executing python function extend_recipe_sysroot
    | NOTE: Direct dependencies are ['.../sources/oe-core/../oe-core/meta/recipes-devtools/quilt/quilt-native_0.69.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/patch/patch_2.8.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/python/python3_3.13.9.bb:do_populate_sysroot']
    | NOTE: Installed into sysroot: []
    | NOTE: Skipping as already exists in sysroot: ['gettext-minimal-native', 'cmake-native', 'libtool-native', 'quilt-native', 'texinfo-dummy-native', 'openssl-native', 'expat-native', 'ncurses-native', 'util-linux-libuuid-native', 'zlib-native', 'libedit-native', 'make-native', 'patch-native', 'perl-native', 'python3-native', 'bzip2-native', 'xz-native', 'zstd-native', 'attr-native', 'gdbm-native', 'libffi-native', 'sqlite3-native']
    | DEBUG: Python function extend_recipe_sysroot finished
    | DEBUG: Executing shell function do_update_crates
    | Traceback (most recent call last):
    |   File "<stdin>", line 41, in <module>
    |   File "<stdin>", line 12, in get_crates
    | ValueError: Unable to find any candidate crates that use crates.io
    |
    | The above exception was the direct cause of the following exception:
    |
    | Traceback (most recent call last):
    |   File "<stdin>", line 43, in <module>
    | ValueError: Cannot parse '.../python3-orjson/3.10.17/sources/orjson-3.10.17/include/cargo/simdutf8-0.1.5/Cargo.lock'
    | WARNING: exit code 1 from a shell command.
    ERROR: Task (.../sources/oe-core/../meta-openembedded/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb:do_update_crates) failed with exit code '1'

Signed-off-by: Martin Schwan <m.schwan@phytec.de>
---
Changes in v3:
  - Revert back to piping Python code to native Python
---
 .../cargo-update-recipe-crates.bbclass           | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

Comments

Alexander Kanavin Dec. 17, 2025, 1:44 p.m. UTC | #1
Thanks, this lgtm.

Alex

On Wed, 17 Dec 2025 at 14:07, Martin Schwan via lists.openembedded.org
<m.schwan=phytec.de@lists.openembedded.org> wrote:
>
> Do not fail if only some Cargo.lock files are empty. Only fail, if there
> are absolutely no dependencies found in any Cargo.lock.
>
> This fixes the following error message, which would occur with "bitbake
> -c update_crates python3-orjson":
>
>     ERROR: python3-orjson-3.10.17-r0 do_update_crates: Execution of '.../python3-orjson/3.10.17/temp/run.do_update_crates.70693' failed with exit code 1
>     ERROR: Logfile of failure stored in: .../python3-orjson/3.10.17/temp/log.do_update_crates.70693
>     Log data follows:
>     | DEBUG: Executing python function extend_recipe_sysroot
>     | NOTE: Direct dependencies are ['.../sources/oe-core/../oe-core/meta/recipes-devtools/quilt/quilt-native_0.69.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/patch/patch_2.8.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/python/python3_3.13.9.bb:do_populate_sysroot']
>     | NOTE: Installed into sysroot: []
>     | NOTE: Skipping as already exists in sysroot: ['gettext-minimal-native', 'cmake-native', 'libtool-native', 'quilt-native', 'texinfo-dummy-native', 'openssl-native', 'expat-native', 'ncurses-native', 'util-linux-libuuid-native', 'zlib-native', 'libedit-native', 'make-native', 'patch-native', 'perl-native', 'python3-native', 'bzip2-native', 'xz-native', 'zstd-native', 'attr-native', 'gdbm-native', 'libffi-native', 'sqlite3-native']
>     | DEBUG: Python function extend_recipe_sysroot finished
>     | DEBUG: Executing shell function do_update_crates
>     | Traceback (most recent call last):
>     |   File "<stdin>", line 41, in <module>
>     |   File "<stdin>", line 12, in get_crates
>     | ValueError: Unable to find any candidate crates that use crates.io
>     |
>     | The above exception was the direct cause of the following exception:
>     |
>     | Traceback (most recent call last):
>     |   File "<stdin>", line 43, in <module>
>     | ValueError: Cannot parse '.../python3-orjson/3.10.17/sources/orjson-3.10.17/include/cargo/simdutf8-0.1.5/Cargo.lock'
>     | WARNING: exit code 1 from a shell command.
>     ERROR: Task (.../sources/oe-core/../meta-openembedded/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb:do_update_crates) failed with exit code '1'
>
> Signed-off-by: Martin Schwan <m.schwan@phytec.de>
> ---
> Changes in v3:
>   - Revert back to piping Python code to native Python
> ---
>  .../cargo-update-recipe-crates.bbclass           | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
>
> diff --git a/meta/classes-recipe/cargo-update-recipe-crates.bbclass b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
> index 3251d5ef2e..ffc658f0f1 100644
> --- a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
> +++ b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
> @@ -38,7 +38,8 @@ def get_crates(f):
>      crates_candidates = list(filter(lambda c: 'crates.io' in c.get('source', ''), crates['package']))
>
>      if not crates_candidates:
> -        raise ValueError("Unable to find any candidate crates that use crates.io")
> +        print("WARNING: Unable to find any candidate crates that use crates.io")
> +        return None
>
>      # Update crates uri and their checksum, to avoid name clashing on the checksum
>      # we need to rename crates with name and version to have a unique key
> @@ -65,14 +66,11 @@ for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
>          continue
>      for file in files:
>          if file == 'Cargo.lock':
> -            try:
> -                cargo_lock_path = os.path.join(root, file)
> -                crates += get_crates(os.path.join(root, file))
> -            except Exception as e:
> -                raise ValueError("Cannot parse '%s'" % cargo_lock_path) from e
> -            else:
> -                found = True
> -if not found:
> +            cargo_lock_path = os.path.join(root, file)
> +            c = get_crates(cargo_lock_path)
> +            if c is not None:
> +                crates += c
> +if crates is None:
>      raise ValueError("Unable to find any Cargo.lock in ${CARGO_LOCK_SRC_DIR}")
>  open("${TARGET_FILE}", 'w').write(crates)
>  EOF
> --
> 2.43.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#228040): https://lists.openembedded.org/g/openembedded-core/message/228040
> Mute This Topic: https://lists.openembedded.org/mt/116825555/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta/classes-recipe/cargo-update-recipe-crates.bbclass b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
index 3251d5ef2e..ffc658f0f1 100644
--- a/meta/classes-recipe/cargo-update-recipe-crates.bbclass
+++ b/meta/classes-recipe/cargo-update-recipe-crates.bbclass
@@ -38,7 +38,8 @@  def get_crates(f):
     crates_candidates = list(filter(lambda c: 'crates.io' in c.get('source', ''), crates['package']))
 
     if not crates_candidates:
-        raise ValueError("Unable to find any candidate crates that use crates.io")
+        print("WARNING: Unable to find any candidate crates that use crates.io")
+        return None
 
     # Update crates uri and their checksum, to avoid name clashing on the checksum
     # we need to rename crates with name and version to have a unique key
@@ -65,14 +66,11 @@  for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
         continue
     for file in files:
         if file == 'Cargo.lock':
-            try:
-                cargo_lock_path = os.path.join(root, file)
-                crates += get_crates(os.path.join(root, file))
-            except Exception as e:
-                raise ValueError("Cannot parse '%s'" % cargo_lock_path) from e
-            else:
-                found = True
-if not found:
+            cargo_lock_path = os.path.join(root, file)
+            c = get_crates(cargo_lock_path)
+            if c is not None:
+                crates += c
+if crates is None:
     raise ValueError("Unable to find any Cargo.lock in ${CARGO_LOCK_SRC_DIR}")
 open("${TARGET_FILE}", 'w').write(crates)
 EOF