From: Ross Burton Date: Thu, 19 Jun 2025 13:20:42 +0000 (+0100) Subject: oeqa/utils/command: fast-path get_bb_var() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fafe77879aa6225aa8b5187ff590bb4998cbf987;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git oeqa/utils/command: fast-path get_bb_var() get_bb_var() currently end up calling 'bitbake -e' and parsing the whole output. However if postconfig isn't set then we can speed this up by just calling bitbake-getvar. The complication with failing bitbake-getvar calls is because we need to be careful to return None instead of the empty string when the variable doesn't exist. Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- diff --git a/meta/lib/oeqa/utils/commands.py b/meta/lib/oeqa/utils/commands.py index 2a47f90e327..b60a6e6c389 100644 --- a/meta/lib/oeqa/utils/commands.py +++ b/meta/lib/oeqa/utils/commands.py @@ -285,7 +285,20 @@ def get_bb_vars(variables=None, target=None, postconfig=None): return values def get_bb_var(var, target=None, postconfig=None): - return get_bb_vars([var], target, postconfig)[var] + if postconfig: + return bitbake("-e %s" % target or "", postconfig=postconfig).output + else: + # Fast-path for the non-postconfig case + cmd = ["bitbake-getvar", "--quiet", "--value", var] + if target: + cmd.extend(["--recipe", target]) + try: + return subprocess.run(cmd, check=True, text=True, stdout=subprocess.PIPE).stdout.strip() + except subprocess.CalledProcessError as e: + # We need to return None not the empty string if the variable hasn't been set. + if e.returncode == 1: + return None + raise def get_test_layer(bblayers=None): if bblayers is None: