diff options
author | Zac Medico <zmedico@gentoo.org> | 2007-07-24 00:52:59 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2007-07-24 00:52:59 +0000 |
commit | 1ac14d317505a270b56d926a714eb443c92df72d (patch) | |
tree | 05a99a10018e7d347a40efc998c756789d304f5c /pym/portage_exec.py | |
parent | 3bbbf459564681e15cd1f70ded266ba70b960cbe (diff) | |
download | portage-1ac14d317505a270b56d926a714eb443c92df72d.tar.gz portage-1ac14d317505a270b56d926a714eb443c92df72d.tar.bz2 portage-1ac14d317505a270b56d926a714eb443c92df72d.zip |
Add FEATURES=fakeroot support which causes install and package phases to run inside fakeroot when a non-root user runs the ebuild command. Thanks to swegener for the initial patch. (trunk r7379)
svn path=/main/branches/2.1.2/; revision=7380
Diffstat (limited to 'pym/portage_exec.py')
-rw-r--r-- | pym/portage_exec.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/pym/portage_exec.py b/pym/portage_exec.py index 800535f55..3a53661bb 100644 --- a/pym/portage_exec.py +++ b/pym/portage_exec.py @@ -8,7 +8,7 @@ import os, atexit, signal, sys import portage_data from portage_util import dump_traceback -from portage_const import BASH_BINARY, SANDBOX_BINARY +from portage_const import BASH_BINARY, SANDBOX_BINARY, FAKEROOT_BINARY from portage_exception import CommandNotFound try: @@ -27,6 +27,9 @@ else: sandbox_capable = (os.path.isfile(SANDBOX_BINARY) and os.access(SANDBOX_BINARY, os.X_OK)) +fakeroot_capable = (os.path.isfile(FAKEROOT_BINARY) and + os.access(FAKEROOT_BINARY, os.X_OK)) + def spawn_bash(mycommand, debug=False, opt_name=None, **keywords): """ Spawns a bash shell running a specific commands @@ -60,6 +63,22 @@ def spawn_sandbox(mycommand, opt_name=None, **keywords): args.append(mycommand) return spawn(args, opt_name=opt_name, **keywords) +def spawn_fakeroot(mycommand, fakeroot_state=None, opt_name=None, **keywords): + args=[FAKEROOT_BINARY] + if not opt_name: + opt_name = os.path.basename(mycommand.split()[0]) + if fakeroot_state: + open(fakeroot_state, "a").close() + args.append("-s") + args.append(fakeroot_state) + args.append("-i") + args.append(fakeroot_state) + args.append("--") + args.append(BASH_BINARY) + args.append("-c") + args.append(mycommand) + return spawn(args, opt_name=opt_name, **keywords) + _exithandlers = [] def atexit_register(func, *args, **kargs): """Wrapper around atexit.register that is needed in order to track |