Use mkdtemp() instead of hardcoded pym/portage/tests/bin/root directory.
authorZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 18:01:30 +0000 (18:01 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 27 Sep 2009 18:01:30 +0000 (18:01 -0000)
svn path=/main/trunk/; revision=14445

pym/portage/tests/bin/setup_env.py

index aab210ee93916844f3e0d633985ef39ab5dd7530..086bcd5f5c71924be9dd359db74a69f6f8fee5c1 100644 (file)
@@ -3,6 +3,8 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
+import tempfile
+
 from portage import os
 from portage import shutil
 from portage.tests import TestCase
@@ -12,25 +14,32 @@ from portage.const import PORTAGE_BIN_PATH
 bindir = os.path.join(os.path.dirname(os.path.dirname(
        os.path.abspath(__file__))),
        "..", "..", "..", "bin", "ebuild-helpers")
-basedir = os.path.join(os.path.dirname(os.path.dirname(
-       os.path.abspath(__file__))), "bin", "root")
-os.environ["D"] = os.path.join(basedir, "image")
-os.environ["T"] = os.path.join(basedir, "temp")
-os.environ["S"] = os.path.join(basedir, "workdir")
-os.environ["PF"] = "portage-tests-0.09-r1"
-os.environ["PATH"] = bindir + ":" + os.environ["PATH"]
-os.environ["PORTAGE_BIN_PATH"] = PORTAGE_BIN_PATH
+basedir = None
+env = None
 
 def binTestsCleanup():
+       global basedir
+       if basedir is None:
+               return
        if os.access(basedir, os.W_OK):
                shutil.rmtree(basedir)
+               basedir = None
+
 def binTestsInit():
        binTestsCleanup()
-       os.mkdir(basedir)
-       os.mkdir(os.environ["D"])
-       os.mkdir(os.environ["T"])
-       os.mkdir(os.environ["S"])
-       os.chdir(os.environ["S"])
+       global basedir, env
+       basedir = tempfile.mkdtemp()
+       env = os.environ.copy()
+       env["D"] = os.path.join(basedir, "image")
+       env["T"] = os.path.join(basedir, "temp")
+       env["S"] = os.path.join(basedir, "workdir")
+       env["PF"] = "portage-tests-0.09-r1"
+       env["PATH"] = bindir + ":" + env["PATH"]
+       env["PORTAGE_BIN_PATH"] = PORTAGE_BIN_PATH
+       os.mkdir(env["D"])
+       os.mkdir(env["T"])
+       os.mkdir(env["S"])
+       os.chdir(env["S"])
 
 class BinTestCase(TestCase):
        def __init__(self, methodName):
@@ -43,7 +52,7 @@ class BinTestCase(TestCase):
 
 def _exists_in_D(path):
        # Note: do not use os.path.join() here, we assume D to end in /
-       return os.access(os.environ["D"] + path, os.W_OK)
+       return os.access(env["D"] + path, os.W_OK)
 def exists_in_D(path):
        if not _exists_in_D(path):
                raise TestCase.failureException
@@ -54,9 +63,10 @@ def xexists_in_D(path):
 def portage_func(func, args, exit_status=0):
        # we don't care about the output of the programs,
        # just their exit value and the state of $D
+       global env
        f = open('/dev/null', 'wb')
        fd_pipes = {0:0,1:f.fileno(),2:f.fileno()}
-       spawn(func+" "+args, env=os.environ, fd_pipes=fd_pipes)
+       spawn([func] + args.split(), env=env, fd_pipes=fd_pipes)
        f.close()
 
 def create_portage_wrapper(bin):
@@ -71,4 +81,4 @@ for bin in os.listdir(bindir):
           bin.startswith("new") or \
           bin.startswith("prep") or \
           bin in ["ecompress","ecompressdir","fowners","fperms"]:
-               globals()[bin] = create_portage_wrapper(bin)
+               globals()[bin] = create_portage_wrapper(os.path.join(bindir, bin))