def exec_func(func, d, dirs = None, pythonexception=False):
"""Execute a BB 'function'"""
+ try:
+ oldcwd = os.getcwd()
+ except:
+ oldcwd = None
+
body = d.getVar(func, False)
if not body:
if body is None:
bb.utils.mkdirhier(adir)
adir = dirs[-1]
else:
- adir = d.getVar('B', True)
- bb.utils.mkdirhier(adir)
-
+ adir = None
ispython = flags.get('python')
lockflag = flags.get('lockfiles')
else:
exec_func_shell(func, d, runfile, cwd=adir)
+ if oldcwd and os.getcwd() != oldcwd:
+ try:
+ bb.warn("Task %s changed cwd to %s" % (func, os.getcwd()))
+ os.chdir(oldcwd)
+ except:
+ pass
+
_functionfmt = """
{function}(d)
"""
if cwd:
try:
olddir = os.getcwd()
- except OSError:
+ except OSError as e:
+ bb.warn("%s: Cannot get cwd: %s" % (func, e))
olddir = None
os.chdir(cwd)
if cwd and olddir:
try:
os.chdir(olddir)
- except OSError:
- pass
+ except OSError as e:
+ bb.warn("%s: Cannot restore cwd %s: %s" % (func, olddir, e))
def shell_trap_code():
return '''#!/bin/sh\n