diff mbox series

lib: Fix dependencies on SPDX code

Message ID 20250307154313.1143215-1-JPEWhacker@gmail.com
State New
Headers show
Series lib: Fix dependencies on SPDX code | expand

Commit Message

Joshua Watt March 7, 2025, 3:43 p.m. UTC
The SPDX library code was being ignored from taskhash calculations due
to accidentally being omitted from BBIMPORTS. This meant that changes in
the code or dependent variables would not cause the task to rebuild
correctly.

In order to add spdx_common, convert the `Dep` object from a named tuple
to a frozen dataclass. These function more or less equivalently, but the
bitbake code parser cannot handle named tuples.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 meta/lib/oe/__init__.py    | 2 +-
 meta/lib/oe/spdx_common.py | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

Comments

Mathieu Dubois-Briand March 10, 2025, 11:18 a.m. UTC | #1
On Fri Mar 7, 2025 at 4:43 PM CET, Joshua Watt via lists.openembedded.org wrote:
> The SPDX library code was being ignored from taskhash calculations due
> to accidentally being omitted from BBIMPORTS. This meant that changes in
> the code or dependent variables would not cause the task to rebuild
> correctly.
>
> In order to add spdx_common, convert the `Dep` object from a named tuple
> to a frozen dataclass. These function more or less equivalently, but the
> bitbake code parser cannot handle named tuples.
>
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---

Hi Joshua,

I believe this is triggering some issue on the autobuilder:

2025-03-10 09:45:19,401 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/srv/pokybuild/yocto-worker/oe-selftest-ubuntu/build/meta/lib/oeqa/selftest/cases/sstatetests.py", line 482, in test_sstate_allarch_samesigs
    self.sstate_common_samesigs(configA, configB, allarch=True)
  File "/srv/pokybuild/yocto-worker/oe-selftest-ubuntu/build/meta/lib/oeqa/selftest/cases/sstatetests.py", line 213, in sstate_common_samesigs
    self.assertEqual(files1, files2)
  File "/usr/lib/python3.12/unittest/case.py", line 885, in assertEqual
    assertion_func(first, second, msg=msg)
  File "/usr/lib/python3.12/unittest/case.py", line 1184, in assertDictEqual
    self.fail(self._formatMessage(msg, standardMsg))
  File "/usr/lib/python3.12/unittest/case.py", line 715, in fail
    raise self.failureException(msg)
AssertionError: {'nat[215727 chars]x': 'd8ed538990588f9d37804e867be98c9b4809de8f2[88942 chars]d1a'} != {'nat[215727 chars]x': '481bab8ce0c89a635d3ec3f3c4a28c0b5a67b2c23[88942 chars]d1a'}

https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/1715394/raw_inline

Can you have a look at this error please?
diff mbox series

Patch

diff --git a/meta/lib/oe/__init__.py b/meta/lib/oe/__init__.py
index d7604812834..3179a3f3d2c 100644
--- a/meta/lib/oe/__init__.py
+++ b/meta/lib/oe/__init__.py
@@ -11,4 +11,4 @@  __path__ = extend_path(__path__, __name__)
 # processed correctly (e.g. qa)
 BBIMPORTS = ["qa", "data", "path", "utils", "types", "package", "packagedata", \
              "packagegroup", "sstatesig", "lsb", "cachedpath", "license", \
-             "reproducible", "rust", "buildcfg", "go"]
+             "reproducible", "rust", "buildcfg", "go", "spdx30_tasks", "spdx_common"]
diff --git a/meta/lib/oe/spdx_common.py b/meta/lib/oe/spdx_common.py
index 23a17271d6c..e1b26edaaf6 100644
--- a/meta/lib/oe/spdx_common.py
+++ b/meta/lib/oe/spdx_common.py
@@ -12,7 +12,7 @@  import re
 import shutil
 
 from pathlib import Path
-
+from dataclasses import dataclass
 
 LIC_REGEX = re.compile(
     rb"^\W*SPDX-License-Identifier:\s*([ \w\d.()+-]+?)(?:\s+\W*)?$",
@@ -77,7 +77,11 @@  def process_sources(d):
     return True
 
 
-Dep = collections.namedtuple("Dep", ["pn", "hashfn", "in_taskhash"])
+@dataclass(frozen=True)
+class Dep(object):
+    pn: str
+    hashfn: str
+    in_taskhash: bool
 
 
 def collect_direct_deps(d, dep_task):