commit:     a9f925aa0c10b728496870b42794783b46882fa8
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Nov 23 21:47:41 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Nov 23 22:01:08 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=a9f925aa

portage.process.spawn: add cwd parameter

Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/portage/process.py | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/lib/portage/process.py b/lib/portage/process.py
index 75ec299f0..ed1a49247 100644
--- a/lib/portage/process.py
+++ b/lib/portage/process.py
@@ -220,7 +220,7 @@ def cleanup():
        pass
 
 def spawn(mycommand, env={}, opt_name=None, fd_pipes=None, returnpid=False,
-          uid=None, gid=None, groups=None, umask=None, logfile=None,
+          uid=None, gid=None, groups=None, umask=None, cwd=None, logfile=None,
           path_lookup=True, pre_exec=None,
           close_fds=(sys.version_info < (3, 4)), unshare_net=False,
           unshare_ipc=False, unshare_mount=False, unshare_pid=False,
@@ -248,6 +248,8 @@ def spawn(mycommand, env={}, opt_name=None, fd_pipes=None, 
returnpid=False,
        @type groups: List
        @param umask: An integer representing the umask for the process (see 
man chmod for umask details)
        @type umask: Integer
+       @param cwd: Current working directory
+       @type cwd: String
        @param logfile: name of a file to use for logging purposes
        @type logfile: String
        @param path_lookup: If the binary is not fully specified then look for 
it in PATH
@@ -350,7 +352,7 @@ def spawn(mycommand, env={}, opt_name=None, fd_pipes=None, 
returnpid=False,
                if pid == 0:
                        try:
                                _exec(binary, mycommand, opt_name, fd_pipes,
-                                       env, gid, groups, uid, umask, pre_exec, 
close_fds,
+                                       env, gid, groups, uid, umask, cwd, 
pre_exec, close_fds,
                                        unshare_net, unshare_ipc, 
unshare_mount, unshare_pid,
                                        cgroup)
                        except SystemExit:
@@ -421,7 +423,8 @@ def spawn(mycommand, env={}, opt_name=None, fd_pipes=None, 
returnpid=False,
        # Everything succeeded
        return 0
 
-def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, groups, uid, umask,
+def _exec(binary, mycommand, opt_name, fd_pipes,
+       env, gid, groups, uid, umask, cwd,
        pre_exec, close_fds, unshare_net, unshare_ipc, unshare_mount, 
unshare_pid,
        cgroup):
 
@@ -446,6 +449,8 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, 
groups, uid, umask,
        @type uid: Integer
        @param umask: an int representing a unix umask (see man chmod for umask 
details)
        @type umask: Integer
+       @param cwd: Current working directory
+       @type cwd: String
        @param pre_exec: A function to be called with no arguments just prior 
to the exec call.
        @type pre_exec: callable
        @param unshare_net: If True, networking will be unshared from the 
spawned process
@@ -609,6 +614,8 @@ def _exec(binary, mycommand, opt_name, fd_pipes, env, gid, 
groups, uid, umask,
                os.setuid(int(uid))
        if umask:
                os.umask(umask)
+       if cwd is not None:
+               os.chdir(cwd)
        if pre_exec:
                pre_exec()
 

Reply via email to