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.

(From OE-Core rev: fafe77879aa6225aa8b5187ff590bb4998cbf987)

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton
2025-06-19 14:20:42 +01:00
committed by Richard Purdie
parent d56b141a4e
commit 55c4f54106

View File

@@ -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: