Commit 23e40674 authored by Antoine Catton's avatar Antoine Catton

Factorization of librecipe.execute.* functions

This was done in order to avoid copy-pasta, and to be
used in coming slapos.recipe.wrapper recipe.
parent 199e17c7
...@@ -47,15 +47,13 @@ def _wait_files_creation(file_list): ...@@ -47,15 +47,13 @@ def _wait_files_creation(file_list):
def execute(args): def execute(args):
"""Portable execution with process replacement""" """Portable execution with process replacement"""
# Note: Candidate for slapos.lib.recipe # XXX: Kept for backward compatibility
os.execv(args[0], args + sys.argv[1:]) generic_exec([args[0], None, None])
def execute_wait(args): def execute_wait(args):
"""Execution but after all files in args[1] exists""" """Execution but after all files in args[1] exists"""
exec_list = list(args[0]) # XXX: Kept for backward compatibility
file_list = list(args[1]) generic_exec([args[0], args[1], None])
_wait_files_creation(file_list)
os.execv(exec_list[0], exec_list + sys.argv[1:])
child_pg = None child_pg = None
...@@ -63,20 +61,26 @@ child_pg = None ...@@ -63,20 +61,26 @@ child_pg = None
def executee(args): def executee(args):
"""Portable execution with process replacement and environment manipulation""" """Portable execution with process replacement and environment manipulation"""
exec_list = list(args[0]) # XXX: Kept for backward compatibility
environment_overriding = args[1] generic_exec([args[0], None, args[1]])
exec_env = os.environ.copy()
exec_env.update(environment_overriding)
os.execve(exec_list[0], exec_list + sys.argv[1:], exec_env)
def executee_wait(args): def executee_wait(args):
"""Portable execution with process replacement and environment manipulation""" """Portable execution with process replacement and environment manipulation"""
# XXX: Kept for backward compatibility
generic_exec(args)
def generic_exec(args):
exec_list = list(args[0]) exec_list = list(args[0])
file_list = list(args[1]) file_list = args[1]
environment_overriding = args[2] environment_overriding = args[2]
exec_env = os.environ.copy() exec_env = os.environ.copy()
exec_env.update(environment_overriding) if environment_overriding is not None:
_wait_files_creation(file_list) exec_env.update(environment_overriding)
if file_list is not None:
_wait_files_creation(file_list)
os.execve(exec_list[0], exec_list + sys.argv[1:], exec_env) os.execve(exec_list[0], exec_list + sys.argv[1:], exec_env)
def sig_handler(signal, frame): def sig_handler(signal, frame):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment