Browse Source

bitbake: runqueue: enable setVariable command to affect task execution

Allow the client to set variables with the setVariable command and have
those changes take effect when running tasks. This is accomplished by
collecting changes made by setVariable separately and pass these to the
worker so it can be applied on top of the datastore it creates.

(Bitbake rev: 69a3cd790da35c3898a8f50c284ad1a4677682a4)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Paul Eggleton 8 years ago
parent
commit
8d315820aa
4 changed files with 13 additions and 2 deletions
  1. 10 2
      bitbake/bin/bitbake-worker
  2. 1 0
      bitbake/lib/bb/command.py
  3. 1 0
      bitbake/lib/bb/cooker.py
  4. 1 0
      bitbake/lib/bb/runqueue.py

+ 10 - 2
bitbake/bin/bitbake-worker

@@ -136,7 +136,7 @@ def sigterm_handler(signum, frame):
     os.killpg(0, signal.SIGTERM)
     os.killpg(0, signal.SIGTERM)
     sys.exit()
     sys.exit()
 
 
-def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, appends, taskdepdata, quieterrors=False):
+def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, appends, taskdepdata, extraconfigdata, quieterrors=False):
     # We need to setup the environment BEFORE the fork, since
     # We need to setup the environment BEFORE the fork, since
     # a fork() or exec*() activates PSEUDO...
     # a fork() or exec*() activates PSEUDO...
 
 
@@ -223,6 +223,9 @@ def fork_off_task(cfg, data, databuilder, workerdata, fn, task, taskname, append
                 the_data.setVar("BUILDNAME", workerdata["buildname"])
                 the_data.setVar("BUILDNAME", workerdata["buildname"])
                 the_data.setVar("DATE", workerdata["date"])
                 the_data.setVar("DATE", workerdata["date"])
                 the_data.setVar("TIME", workerdata["time"])
                 the_data.setVar("TIME", workerdata["time"])
+                for varname, value in extraconfigdata.items():
+                    the_data.setVar(varname, value)
+
                 bb.parse.siggen.set_taskdata(workerdata["sigdata"])
                 bb.parse.siggen.set_taskdata(workerdata["sigdata"])
                 ret = 0
                 ret = 0
 
 
@@ -329,6 +332,7 @@ class BitbakeWorker(object):
         self.cookercfg = None
         self.cookercfg = None
         self.databuilder = None
         self.databuilder = None
         self.data = None
         self.data = None
+        self.extraconfigdata = None
         self.build_pids = {}
         self.build_pids = {}
         self.build_pipes = {}
         self.build_pipes = {}
     
     
@@ -363,6 +367,7 @@ class BitbakeWorker(object):
                     pass
                     pass
             if len(self.queue):
             if len(self.queue):
                 self.handle_item(b"cookerconfig", self.handle_cookercfg)
                 self.handle_item(b"cookerconfig", self.handle_cookercfg)
+                self.handle_item(b"extraconfigdata", self.handle_extraconfigdata)
                 self.handle_item(b"workerdata", self.handle_workerdata)
                 self.handle_item(b"workerdata", self.handle_workerdata)
                 self.handle_item(b"runtask", self.handle_runtask)
                 self.handle_item(b"runtask", self.handle_runtask)
                 self.handle_item(b"finishnow", self.handle_finishnow)
                 self.handle_item(b"finishnow", self.handle_finishnow)
@@ -391,6 +396,9 @@ class BitbakeWorker(object):
         self.databuilder.parseBaseConfiguration()
         self.databuilder.parseBaseConfiguration()
         self.data = self.databuilder.data
         self.data = self.databuilder.data
 
 
+    def handle_extraconfigdata(self, data):
+        self.extraconfigdata = pickle.loads(data)
+
     def handle_workerdata(self, data):
     def handle_workerdata(self, data):
         self.workerdata = pickle.loads(data)
         self.workerdata = pickle.loads(data)
         bb.msg.loggerDefaultDebugLevel = self.workerdata["logdefaultdebug"]
         bb.msg.loggerDefaultDebugLevel = self.workerdata["logdefaultdebug"]
@@ -416,7 +424,7 @@ class BitbakeWorker(object):
         fn, task, taskname, quieterrors, appends, taskdepdata = pickle.loads(data)
         fn, task, taskname, quieterrors, appends, taskdepdata = pickle.loads(data)
         workerlog_write("Handling runtask %s %s %s\n" % (task, fn, taskname))
         workerlog_write("Handling runtask %s %s %s\n" % (task, fn, taskname))
 
 
-        pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.databuilder, self.workerdata, fn, task, taskname, appends, taskdepdata, quieterrors)
+        pid, pipein, pipeout = fork_off_task(self.cookercfg, self.data, self.databuilder, self.workerdata, fn, task, taskname, appends, taskdepdata, self.extraconfigdata, quieterrors)
 
 
         self.build_pids[pid] = task
         self.build_pids[pid] = task
         self.build_pipes[pid] = runQueueWorkerPipe(pipein, pipeout)
         self.build_pipes[pid] = runQueueWorkerPipe(pipein, pipeout)

+ 1 - 0
bitbake/lib/bb/command.py

@@ -187,6 +187,7 @@ class CommandsSync:
         """
         """
         varname = params[0]
         varname = params[0]
         value = str(params[1])
         value = str(params[1])
+        command.cooker.extraconfigdata[varname] = value
         command.cooker.data.setVar(varname, value)
         command.cooker.data.setVar(varname, value)
 
 
     def getSetVariable(self, command, params):
     def getSetVariable(self, command, params):

+ 1 - 0
bitbake/lib/bb/cooker.py

@@ -358,6 +358,7 @@ class BBCooker:
         self.databuilder.parseBaseConfiguration()
         self.databuilder.parseBaseConfiguration()
         self.data = self.databuilder.data
         self.data = self.databuilder.data
         self.data_hash = self.databuilder.data_hash
         self.data_hash = self.databuilder.data_hash
+        self.extraconfigdata = {}
 
 
         if consolelog:
         if consolelog:
             self.data.setVar("BB_CONSOLELOG", consolelog)
             self.data.setVar("BB_CONSOLELOG", consolelog)

+ 1 - 0
bitbake/lib/bb/runqueue.py

@@ -1036,6 +1036,7 @@ class RunQueue:
         }
         }
 
 
         worker.stdin.write(b"<cookerconfig>" + pickle.dumps(self.cooker.configuration) + b"</cookerconfig>")
         worker.stdin.write(b"<cookerconfig>" + pickle.dumps(self.cooker.configuration) + b"</cookerconfig>")
+        worker.stdin.write(b"<extraconfigdata>" + pickle.dumps(self.cooker.extraconfigdata) + b"</extraconfigdata>")
         worker.stdin.write(b"<workerdata>" + pickle.dumps(workerdata) + b"</workerdata>")
         worker.stdin.write(b"<workerdata>" + pickle.dumps(workerdata) + b"</workerdata>")
         worker.stdin.flush()
         worker.stdin.flush()