diff mbox series

[2/2] data_smart: fix ??= operator for variable flags

Message ID 20250110190842.3861684-2-yoann.congal@smile.fr
State Accepted, archived
Commit 0329a7e3ac694737f2d2c1861f65492551360663
Headers show
Series [1/2] tests/parse: add test for ?= and ??= operators for variable flags | expand

Commit Message

Yoann Congal Jan. 10, 2025, 7:08 p.m. UTC
From: Yoann Congal <yoann.congal@smile.fr>

??= operator works for variable value by defining a "_defaultval" flag.

Use something similar for flags: For the default value of the flag
"flag_name", define a flag "_defaultval_flag_flagname" that is used when
reading flag_name but no other value has been set.

Fixes [YOCTO #15685]

Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
---
 lib/bb/data_smart.py | 2 ++
 lib/bb/parse/ast.py  | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index c6049d578..897ceeb32 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -827,6 +827,8 @@  class DataSmart(MutableMapping):
                 value = copy.copy(local_var[flag])
             elif flag == "_content" and "_defaultval" in local_var and not noweakdefault:
                 value = copy.copy(local_var["_defaultval"])
+            elif "_defaultval_flag_"+flag in local_var and not noweakdefault:
+                value = copy.copy(local_var["_defaultval_flag_"+flag])
 
 
         if flag == "_content" and local_var is not None and ":append" in local_var and not parsing:
diff --git a/lib/bb/parse/ast.py b/lib/bb/parse/ast.py
index 2f6c6a005..dcc845dcd 100644
--- a/lib/bb/parse/ast.py
+++ b/lib/bb/parse/ast.py
@@ -151,8 +151,10 @@  class DataNode(AstNode):
                 bb.warn(key + " " + groupd[op] + " is not a recommended operator combination, please replace it.")
 
         flag = None
-        if 'flag' in groupd and groupd['flag'] is not None:
+        if 'flag' in groupd and groupd['flag'] is not None and not groupd["lazyques"]:
             flag = groupd['flag']
+        elif 'flag' in groupd and groupd['flag'] is not None and groupd["lazyques"]:
+            flag = "_defaultval_flag_"+groupd['flag']
         elif groupd["lazyques"]:
             flag = "_defaultval"