From patchwork Thu Feb 13 15:05:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Louis Rannou X-Patchwork-Id: 57268 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1875BC021A0 for ; Thu, 13 Feb 2025 15:06:02 +0000 (UTC) Received: from 4.mo576.mail-out.ovh.net (4.mo576.mail-out.ovh.net [46.105.42.102]) by mx.groups.io with SMTP id smtpd.web10.13151.1739459153208923736 for ; Thu, 13 Feb 2025 07:05:54 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@syslinbit.com header.s=ovhmo4479509-selector1 header.b=A9q+HOWm; spf=softfail (domain: syslinbit.com, ip: 46.105.42.102, mailfrom: louis.rannou@syslinbit.com) Received: from director5.ghost.mail-out.ovh.net (unknown [10.109.176.51]) by mo576.mail-out.ovh.net (Postfix) with ESMTP id 4Ytz5W2ypFz23sQ for ; Thu, 13 Feb 2025 15:05:51 +0000 (UTC) Received: from ghost-submission-5b5ff79f4f-tfz7l (unknown [10.110.178.109]) by director5.ghost.mail-out.ovh.net (Postfix) with ESMTPS id D42731FEC4; Thu, 13 Feb 2025 15:05:50 +0000 (UTC) Received: from syslinbit.com ([37.59.142.104]) by ghost-submission-5b5ff79f4f-tfz7l with ESMTPSA id MQGMAE4Krmfl8AAAvMEkeg:T2 (envelope-from ); Thu, 13 Feb 2025 15:05:50 +0000 Authentication-Results: garm.ovh; auth=pass (GARM-104R00531e33edd-221a-418f-921a-4ad4da9ca463, A3E930DA2C8C0F3093FF869A1907ED10BC64B092) smtp.auth=louis.rannou@syslinbit.com X-OVh-ClientIp: 45.81.62.9 From: Louis Rannou Date: Thu, 13 Feb 2025 16:05:42 +0100 Subject: [PATCH v2 1/2] bitbake: data_smart: fix ??= operator for variable flags MIME-Version: 1.0 Message-Id: <20250213-varflags-v2-1-884794e84e55@syslinbit.com> References: <20250213-varflags-v2-0-884794e84e55@syslinbit.com> In-Reply-To: <20250213-varflags-v2-0-884794e84e55@syslinbit.com> To: bitbake-devel@lists.openembedded.org Cc: Louis Rannou , pascal.eberhard@se.com, yoann.congal@smile.fr, Louis Rannou X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1739459150; l=1994; i=louis.rannou@syslinbit.com; s=20230614; h=from:subject:message-id; bh=Dx2HhWOMizV+rj9TUGqbRx+WNn79g7h8yBD/16ymevQ=; b=1+Dhol4psTFljGLo8pnBhP54rDJttWl6o5QuN7NycRFjyQwKVkCdnM/fQZUq2vbVXXotgly1J 7QAaeOtuMUzDz6isoQ0R4F1nVkAXdIBRVUyVwaj7nUSyg7vSIfGRAg6 X-Developer-Key: i=louis.rannou@syslinbit.com; a=ed25519; pk=QLSK64UNeqThVe2CiH917a68zTpexYuA7iXw6WQ0bbI= X-Ovh-Tracer-Id: 742812466083192197 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegjedtlecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemucehtddtnecunecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpefnohhuihhsucftrghnnhhouhcuoehlohhuihhsrdhrrghnnhhouhesshihshhlihhnsghithdrtghomheqnecuggftrfgrthhtvghrnhepudfhueeutdehffdvhfejleffudekieduffffteefiedutdeuhfehkeffueehfeevnecukfhppeduvdejrddtrddtrddupdeghedrkedurdeivddrledpfeejrdehledrudegvddruddtgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeduvdejrddtrddtrddupdhmrghilhhfrhhomheplhhouhhishdrrhgrnhhnohhusehshihslhhinhgsihhtrdgtohhmpdhnsggprhgtphhtthhopedupdhrtghpthhtohepsghithgsrghkvgdquggvvhgvlheslhhishhtshdrohhpvghnvghmsggvugguvggurdhorhhgpdfovfetjfhoshhtpehmohehjeeimgdpmhhouggvpehsmhhtphhouhht DKIM-Signature: a=rsa-sha256; bh=cet+7bEbBarI2/jVtleNHDLE02Dlyw7f8Ban2Jc9KCk=; c=relaxed/relaxed; d=syslinbit.com; h=From; s=ovhmo4479509-selector1; t=1739459151; v=1; b=A9q+HOWm86bXJbYLXAUMvQHQ3kw2TGXFow+w7pGqL9Rg+uzSC4wjXkHALOrqkc8HKalL4i6m 82/GReYrQisEjyjjlyo9yDz5rNqmRy5Bvg9aGt1AokdpgHbiBOdwS7w8+Erev1bdR7NfxSN3eX8 3RDZzH2GGm8MdAiTEWD42WiB3op5RxByXA0DU+c8XUNq3Qcjvlq1GHdqkrZaU86vuGTXksYv5yZ 8fP9aII8T5B2Mk27Ewf8EdHzm/fxtbrxIGUEop/nVpLG5yB3VDyuUKQ4yIRmf5llSmTfLurqCZb tqzMXpVkjYIliaWOgF3TyPEkJ/H4IepZA5NkVr0WAigYA== List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 13 Feb 2025 15:06:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/17214 From: Louis Rannou Variable flags have been fixed in commit 0329a7e3ac694737f2d2c1861f65492551360663 which introduces the "_defaultval_flag_" prefix for default values. This must not be ignored in delVarFlags and getVarFlags. Fixes [YOCTO #15685] Signed-off-by: Louis Rannou --- lib/bb/data_smart.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py index 897ceeb32c7ce0acb8ed44c25e1bf2f2f28aa9dc..54125965666a46848d10051dba80a9f8cbaee439 100644 --- a/lib/bb/data_smart.py +++ b/lib/bb/data_smart.py @@ -920,6 +920,8 @@ class DataSmart(MutableMapping): self.varhistory.record(**loginfo) del self.dict[var][flag] + if ("_defaultval_flag_" + flag) in self.dict[var]: + del self.dict[var]["_defaultval_flag_" + flag] def appendVarFlag(self, var, flag, value, **loginfo): loginfo['op'] = 'append' @@ -954,17 +956,22 @@ class DataSmart(MutableMapping): flags = {} if local_var: - for i in local_var: - if i.startswith(("_", ":")) and not internalflags: + for i, val in local_var.items(): + if i.startswith("_defaultval_flag_") and not internalflags: + i = i[len("_defaultval_flag_"):] + if i not in local_var: + flags[i] = val + elif i.startswith(("_", ":")) and not internalflags: continue - flags[i] = local_var[i] + else: + flags[i] = val + if expand and i in expand: flags[i] = self.expand(flags[i], var + "[" + i + "]") if len(flags) == 0: return None return flags - def delVarFlags(self, var, **loginfo): self.expand_cache = {} if not var in self.dict: From patchwork Thu Feb 13 15:05:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Louis Rannou X-Patchwork-Id: 57269 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18A4AC021A4 for ; Thu, 13 Feb 2025 15:06:02 +0000 (UTC) Received: from 2.mo560.mail-out.ovh.net (2.mo560.mail-out.ovh.net [188.165.53.149]) by mx.groups.io with SMTP id smtpd.web11.12991.1739459154100446871 for ; Thu, 13 Feb 2025 07:05:54 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@syslinbit.com header.s=ovhmo4479509-selector1 header.b=W+Qnc7UZ; spf=softfail (domain: syslinbit.com, ip: 188.165.53.149, mailfrom: louis.rannou@syslinbit.com) Received: from director5.ghost.mail-out.ovh.net (unknown [10.108.2.10]) by mo560.mail-out.ovh.net (Postfix) with ESMTP id 4Ytz5X0df4z1fY1 for ; Thu, 13 Feb 2025 15:05:51 +0000 (UTC) Received: from ghost-submission-5b5ff79f4f-tfz7l (unknown [10.110.178.109]) by director5.ghost.mail-out.ovh.net (Postfix) with ESMTPS id 3FD511FE24; Thu, 13 Feb 2025 15:05:51 +0000 (UTC) Received: from syslinbit.com ([37.59.142.104]) by ghost-submission-5b5ff79f4f-tfz7l with ESMTPSA id MQGMAE4Krmfl8AAAvMEkeg:T3 (envelope-from ); Thu, 13 Feb 2025 15:05:51 +0000 Authentication-Results: garm.ovh; auth=pass (GARM-104R0056af30a17-cc09-4f4e-a2d2-4ddf48233afd, A3E930DA2C8C0F3093FF869A1907ED10BC64B092) smtp.auth=louis.rannou@syslinbit.com X-OVh-ClientIp: 45.81.62.9 From: Louis Rannou Date: Thu, 13 Feb 2025 16:05:43 +0100 Subject: [PATCH v2 2/2] bitbake: tests/data: add tests for variable flags MIME-Version: 1.0 Message-Id: <20250213-varflags-v2-2-884794e84e55@syslinbit.com> References: <20250213-varflags-v2-0-884794e84e55@syslinbit.com> In-Reply-To: <20250213-varflags-v2-0-884794e84e55@syslinbit.com> To: bitbake-devel@lists.openembedded.org Cc: Louis Rannou , pascal.eberhard@se.com, yoann.congal@smile.fr, Louis Rannou X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1739459150; l=3905; i=louis.rannou@syslinbit.com; s=20230614; h=from:subject:message-id; bh=Dhur+lXPI7ACOOYVSi+jG/b75ddfsceJ9P/7+FD1OQk=; b=AAANTIhl2n+MOgkdII90kNS/jQ6PtlccywMhh5R1eoQkPOY3WMqdh7lZshLBSBdTjEBo5UNoe VCyVOuGxx/SCeQDqmgT7pbTnnE7At00qlvnXhh1BaVkKeDT/TvM15XD X-Developer-Key: i=louis.rannou@syslinbit.com; a=ed25519; pk=QLSK64UNeqThVe2CiH917a68zTpexYuA7iXw6WQ0bbI= X-Ovh-Tracer-Id: 742812464117767557 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdegjedtlecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemucehtddtnecunecujfgurhephfffufggtgfgkfhfjgfvvefosehtjeertdertdejnecuhfhrohhmpefnohhuihhsucftrghnnhhouhcuoehlohhuihhsrdhrrghnnhhouhesshihshhlihhnsghithdrtghomheqnecuggftrfgrthhtvghrnhepvdetudetueduieeileejvefhjeeujeejkefgveehfedvjeffueffgeffteelteelnecuffhomhgrihhnpehtvghsthhsrdgurghtrgenucfkphepuddvjedrtddrtddruddpgeehrdekuddriedvrdelpdefjedrheelrddugedvrddutdegnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehinhgvthepuddvjedrtddrtddruddpmhgrihhlfhhrohhmpehlohhuihhsrdhrrghnnhhouhesshihshhlihhnsghithdrtghomhdpnhgspghrtghpthhtohepuddprhgtphhtthhopegsihhtsggrkhgvqdguvghvvghlsehlihhsthhsrdhophgvnhgvmhgsvgguuggvugdrohhrghdpoffvtefjohhsthepmhhoheeitdgmpdhmohguvgepshhmthhpohhuth DKIM-Signature: a=rsa-sha256; bh=Q2QIEX9Eu5OXZowmCWHZD/GLWYvvsbQBQrCzTeNAons=; c=relaxed/relaxed; d=syslinbit.com; h=From; s=ovhmo4479509-selector1; t=1739459152; v=1; b=W+Qnc7UZN3vzpZxLbLKs4CzBjZvGqsvYb2ASXAH8iAPBt8dnqDx8qYMXJ47DUIruskTR28pq RppqWVRpyY9yilL568FgFpIt7g2M07wWpI0byFtfdniR7AOI2lV3vQmacgWiWkAlxpAKpzCj7ES NTDjaFiReURTvIyvYxqnSke1tMUGXHWjieracijqswaIlumhFcptLD2mRhtHKzpaGZ1c/zRHPFa cHQ4R6xfhH8BLjnuGR9icqxguvzl5zgqAkI2TZl+Ed1E+HQsYghqJhkGPHF2rc3XggaCPXpzyvn rmXoAxNLrCcLJeZDyBTP2AGfmML28cnenG3tpJ1lXmAEQ== List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 13 Feb 2025 15:06:02 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/17215 From: Louis Rannou Check default flags are correctly returned by getVarFlags and check all flags are returned when internalflags is True. Check delVarFlags also removes default value. Check all flags are removed after delVar. Run the test with: $ bitbake-selftest -v bb.tests.data.TestFlags test_delflag (bb.tests.data.TestFlags.test_delflag) ... ok test_delvar (bb.tests.data.TestFlags.test_delvar) ... ok test_setflag (bb.tests.data.TestFlags.test_setflag) ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK This is a test case for [YOCTO #15685] Signed-off-by: Louis Rannou --- lib/bb/tests/data.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/lib/bb/tests/data.py b/lib/bb/tests/data.py index cbc7c1ecd4315b69b891564a1a3f111effee455c..a895f6a58efbbbdeba6f9c3f7ff0e43629f86fd1 100644 --- a/lib/bb/tests/data.py +++ b/lib/bb/tests/data.py @@ -450,17 +450,64 @@ class TestFlags(unittest.TestCase): self.d = bb.data.init() self.d.setVar("foo", "value of foo") self.d.setVarFlag("foo", "flag1", "value of flag1") + self.d.setVarFlag("foo", "_defaultval_flag_flag1", "default of flag1") self.d.setVarFlag("foo", "flag2", "value of flag2") + self.d.setVarFlag("foo", "_defaultval_flag_flag2", "default of flag2") + self.d.setVarFlag("foo", "flag3", "value of flag3") + self.d.setVarFlag("foo", "_defaultval_flag_flagnovalue", "default of flagnovalue") def test_setflag(self): self.assertEqual(self.d.getVarFlag("foo", "flag1", False), "value of flag1") self.assertEqual(self.d.getVarFlag("foo", "flag2", False), "value of flag2") + self.assertDictEqual( + self.d.getVarFlags("foo"), + { + "flag1": "value of flag1", + "flag2": "value of flag2", + "flag3": "value of flag3", + "flagnovalue": "default of flagnovalue", + } + ) + self.assertDictEqual( + self.d.getVarFlags("foo", internalflags=True), + { + "_content": "value of foo", + "flag1": "value of flag1", + "flag2": "value of flag2", + "flag3": "value of flag3", + "_defaultval_flag_flag1": "default of flag1", + "_defaultval_flag_flag2": "default of flag2", + "_defaultval_flag_flagnovalue": "default of flagnovalue", + } + ) def test_delflag(self): self.d.delVarFlag("foo", "flag2") + self.d.delVarFlag("foo", "flag3") self.assertEqual(self.d.getVarFlag("foo", "flag1", False), "value of flag1") self.assertEqual(self.d.getVarFlag("foo", "flag2", False), None) - + self.assertDictEqual( + self.d.getVarFlags("foo"), + { + "flag1": "value of flag1", + "flagnovalue": "default of flagnovalue", + } + ) + self.assertDictEqual( + self.d.getVarFlags("foo", internalflags=True), + { + "_content": "value of foo", + "flag1": "value of flag1", + "_defaultval_flag_flag1": "default of flag1", + "_defaultval_flag_flagnovalue": "default of flagnovalue", + } + ) + + def test_delvar(self): + self.d.delVar("foo") + self.assertEqual(self.d.getVarFlag("foo", "flag1", False), None) + self.assertEqual(self.d.getVarFlag("foo", "flag2", False), None) + self.assertEqual(self.d.getVarFlags("foo", internalflags=True), None) class Contains(unittest.TestCase): def setUp(self):