summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/bb/command.py11
-rw-r--r--lib/bb/data_smart.py2
-rw-r--r--lib/bb/tests/data.py10
-rw-r--r--lib/bb/tinfoil.py6
4 files changed, 18 insertions, 11 deletions
diff --git a/lib/bb/command.py b/lib/bb/command.py
index b296b8ce8..352838b0a 100644
--- a/lib/bb/command.py
+++ b/lib/bb/command.py
@@ -483,14 +483,13 @@ class CommandsSync:
dataStoreConnectorGetVarHistory.readonly = True
def dataStoreConnectorExpandPythonRef(self, command, params):
- dsindex = params[0]
+ config_data_dict = params[0]
varname = params[1]
expr = params[2]
- if dsindex:
- datastore = self.dataStores[dsindex]
- else:
- datastore = command.cooker.data
- varparse = bb.data_smart.VariableParse(varname, datastore)
+
+ config_data = command.remotedatastores.receive_datastore(config_data_dict)
+
+ varparse = bb.data_smart.VariableParse(varname, config_data)
return varparse.python_sub(expr)
def dataStoreConnectorRelease(self, command, params):
diff --git a/lib/bb/data_smart.py b/lib/bb/data_smart.py
index 5d0ed12d6..4d0a77128 100644
--- a/lib/bb/data_smart.py
+++ b/lib/bb/data_smart.py
@@ -123,7 +123,7 @@ class VariableParse:
if "_remote_data" in self.d:
connector = self.d["_remote_data"]
- return connector.expandPythonRef(self.varname, code)
+ return connector.expandPythonRef(self.varname, code, self.d)
codeobj = compile(code.strip(), self.varname or "<expansion>", "eval")
diff --git a/lib/bb/tests/data.py b/lib/bb/tests/data.py
index 2bd481b5d..a17245f90 100644
--- a/lib/bb/tests/data.py
+++ b/lib/bb/tests/data.py
@@ -458,8 +458,11 @@ class Remote(unittest.TestCase):
return self.d.localkeys()
def getVarHistory(self, name):
return self.d.varhistory.variable(name)
- def expandPythonRef(self, varname, expr):
- varparse = bb.data_smart.VariableParse(varname, self.d)
+ def expandPythonRef(self, varname, expr, d):
+ localdata = self.d.createCopy()
+ for key in d.localkeys():
+ localdata.setVar(d.getVar(key))
+ varparse = bb.data_smart.VariableParse(varname, localdata)
return varparse.python_sub(expr)
def setVar(self, name, value):
self.d.setVar(name, value)
@@ -483,3 +486,6 @@ class Remote(unittest.TestCase):
# Test setVar on client side affects server
d2.setVar('HELLO', 'other-world')
self.assertEqual(d1.getVar('HELLO'), 'other-world')
+ # Test client side data is incorporated in python expansion (which is done on server)
+ d2.setVar('FOO', 'bar')
+ self.assertEqual(d2.expand('${@d.getVar("FOO")}'), 'bar')
diff --git a/lib/bb/tinfoil.py b/lib/bb/tinfoil.py
index c551a9f1f..720bf4b93 100644
--- a/lib/bb/tinfoil.py
+++ b/lib/bb/tinfoil.py
@@ -29,6 +29,7 @@ import bb.providers
import bb.taskdata
import bb.utils
import bb.command
+import bb.remotedata
from bb.cookerdata import CookerConfiguration, ConfigParameters
from bb.main import setup_bitbake, BitBakeConfigParameters, BBMainException
import bb.fetch2
@@ -69,8 +70,9 @@ class TinfoilDataStoreConnector:
return set(self.tinfoil.run_command('dataStoreConnectorGetKeys', self.dsindex))
def getVarHistory(self, name):
return self.tinfoil.run_command('dataStoreConnectorGetVarHistory', self.dsindex, name)
- def expandPythonRef(self, varname, expr):
- ret = self.tinfoil.run_command('dataStoreConnectorExpandPythonRef', self.dsindex, varname, expr)
+ def expandPythonRef(self, varname, expr, d):
+ ds = bb.remotedata.RemoteDatastores.transmit_datastore(d)
+ ret = self.tinfoil.run_command('dataStoreConnectorExpandPythonRef', ds, varname, expr)
return ret
def setVar(self, varname, value):
if self.dsindex is None: