[bitbake-devel] [PATCH 1/1] runqueue.py: Add umask task control

Mark Hatle mark.hatle at windriver.com
Wed Jun 22 17:57:49 UTC 2011


The umask for a task can now be set as:

task[umask] = 022
task[umask] = '022'

If specified as a text string, it must be octal.  (This is due to
recipe parsing where it's always set to a string.)

Signed-off-by: Mark Hatle <mark.hatle at windriver.com>
---
 lib/bb/build.py    |    1 +
 lib/bb/runqueue.py |   12 ++++++++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/lib/bb/build.py b/lib/bb/build.py
index 15ba956..4bbf10f 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -465,6 +465,7 @@ def add_tasks(tasklist, d):
         getTask('nostamp')
         getTask('fakeroot')
         getTask('noexec')
+        getTask('umask')
         task_deps['parents'][task] = []
         for dep in flags['deps']:
             dep = data.expand(dep, d)
diff --git a/lib/bb/runqueue.py b/lib/bb/runqueue.py
index 1f3b54c..e455893 100644
--- a/lib/bb/runqueue.py
+++ b/lib/bb/runqueue.py
@@ -1063,8 +1063,17 @@ class RunQueueExecute:
         # a fork() or exec*() activates PSEUDO...
 
         envbackup = {}
+        umask = -1
 
         taskdep = self.rqdata.dataCache.task_deps[fn]
+        if 'umask' in taskdep and taskname in taskdep['umask']:
+            # umask might come in as a number or text string..
+            try:
+                 umask = int(taskdep['umask'][taskname],8)
+            except TypeError:
+                 umask = taskdep['umask'][taskname]
+            logger.warning("Using umask 0%o %s, %s" % (umask, fn, taskname))
+
         if 'fakeroot' in taskdep and taskname in taskdep['fakeroot']:
             envvars = (self.rqdata.dataCache.fakerootenv[fn] or "").split()
             for key, value in (var.split('=') for var in envvars):
@@ -1103,6 +1112,9 @@ class RunQueueExecute:
             newsi = os.open(os.devnull, os.O_RDWR)
             os.dup2(newsi, sys.stdin.fileno())
 
+            if umask != -1:
+                os.umask(umask)
+
             bb.data.setVar("BB_WORKERCONTEXT", "1", self.cooker.configuration.data)
             bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY", self, self.cooker.configuration.data)
             bb.data.setVar("__RUNQUEUE_DO_NOT_USE_EXTERNALLY2", fn, self.cooker.configuration.data)
-- 
1.7.3.4





More information about the bitbake-devel mailing list