]> code.ossystems Code Review - openembedded-core.git/commitdiff
build: use a contextmanager for locks
authorChris Larson <chris_larson@mentor.com>
Fri, 10 Dec 2010 01:29:31 +0000 (20:29 -0500)
committerRichard Purdie <rpurdie@linux.intel.com>
Tue, 4 Jan 2011 14:46:48 +0000 (14:46 +0000)
Also don't bother passing logfile to exec_func_python, at least until we start
adding the logfile as a file handler to the bitbake logger.

(Bitbake rev: f99ee4680c9f67b7ed13fc06044ba2382f9a782c)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
bitbake/lib/bb/build.py
bitbake/lib/bb/utils.py

index 79fb1def9b4131f239c82f3338d007ebc2f9aa28..5d07b066402be1a38f94ad4a414b1946a7fbc93f 100644 (file)
 #
 #Based on functions from the base bb module, Copyright 2003 Holger Schurig
 
-from bb import data, event, mkdirhier, utils
 import os
 import sys
 import logging
 import bb
 import bb.utils
 import bb.process
+from contextlib import nested
+from bb import data, event, mkdirhier, utils
 
 logger = logging.getLogger("BitBake.Build")
 
@@ -142,26 +143,21 @@ def exec_func(func, d, dirs = None, logfile = NULL):
     if flags.get('fakeroot') and not flags.get('task'):
         bb.fatal("Function %s specifies fakeroot but isn't a task?!" % func)
 
+    lockflag = flags.get('lockfiles')
+    if lockflag:
+        lockfiles = [data.expand(f, d) for f in lockflag.split()]
+    else:
+        lockfiles = None
+
     tempdir = data.getVar('T', d, 1)
     runfile = os.path.join(tempdir, 'run.{0}.{1}'.format(func, os.getpid()))
 
-    locks = []
-    lockfiles = flags.get('lockfiles')
-    if lockfiles:
-        for lock in data.expand(lockfiles, d).split():
-            locks.append(bb.utils.lockfile(lock))
-
-    try:
+    with bb.utils.fileslocked(lockfiles):
         if ispython:
             exec_func_python(func, d, runfile, logfile, cwd=adir)
         else:
             exec_func_shell(func, d, runfile, logfile, cwd=adir)
 
-    finally:
-        # Unlock any lockfiles
-        for lock in locks:
-            bb.utils.unlockfile(lock)
-
 _functionfmt = """
 def {function}(d):
 {body}
index d9f543bc60ff0df4d624dcbc0636e650d4c62df7..ba50801ae9ec375d9046fe2af034f9a13a0d1ff0 100644 (file)
@@ -26,6 +26,7 @@ import logging
 import bb
 import bb.msg
 from commands import getstatusoutput
+from contextlib import contextmanager
 
 logger = logging.getLogger("BitBake.Util")
 
@@ -398,6 +399,18 @@ def simple_exec(code, context):
 def better_eval(source, locals):
     return eval(source, _context, locals)
 
+@contextmanager
+def fileslocked(files):
+    locks = []
+    if files:
+        for lockfile in files:
+            locks.append(bb.utils.lockfile(lock))
+
+    yield
+
+    for lock in locks:
+        bb.utils.unlockfile(lock)
+
 def lockfile(name):
     """
     Use the file fn as a lock file, return when the lock has been acquired.