@@ -182,11 +182,8 @@ def fork_off_task(cfg, data, databuilder, workerdata, extraconfigdata, runtask):
elif workerdata["umask"]:
umask = workerdata["umask"]
if umask:
- # umask might come in as a number or text string..
- try:
- umask = int(umask, 8)
- except TypeError:
- pass
+ # Convert to a python numeric value as it could be a string
+ bb.utils.to_filemode(umask)
dry_run = cfg.dry_run or runtask['dry_run']
@@ -692,3 +692,14 @@ class EnvironmentTests(unittest.TestCase):
self.assertIn("A", os.environ)
self.assertEqual(os.environ["A"], "this is A")
self.assertNotIn("B", os.environ)
+
+class FilemodeTests(unittest.TestCase):
+ def test_filemode_convert(self):
+ self.assertEqual(0o775, bb.utils.to_filemode("0o775"))
+ self.assertEqual(0o775, bb.utils.to_filemode(0o775))
+ self.assertEqual(0o775, bb.utils.to_filemode("775"))
+ with self.assertRaises(ValueError):
+ bb.utils.to_filemode("xyz")
+ with self.assertRaises(ValueError):
+ bb.utils.to_filemode("999")
+
@@ -1211,6 +1211,16 @@ def which(path, item, direction = 0, history = False, executable=False):
return "", hist
return ""
+def to_filemode(input):
+ """
+ Take a bitbake variable contents defining a file mode and return
+ the proper python representation of the number
+ """
+ # umask might come in as a number or text string..
+ if type(input) is int:
+ return input
+ return int(input, 8)
+
@contextmanager
def umask(new_mask):
"""
We have other places in the code where we need to take filemode/mask information from a bitbake variable and turn it into a real python number. Turn this internal code into public API in bb.utils and add some tests for it. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- bin/bitbake-worker | 7 ++----- lib/bb/tests/utils.py | 11 +++++++++++ lib/bb/utils.py | 10 ++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-)