# HG changeset patch # User Bernhard Herzog # Date 1211460283 0 # Node ID e08b4b09d35f5457f3d78e71926f79c10ba834d0 # Parent 37aadd33ffabda3c0551c71885526edd1110b1f0 New parameter treepkg.run.call: extra_env for additional environment variables passed to the subprocess. Also add a test case. diff -r 37aadd33ffab -r e08b4b09d35f test/test_run.py --- a/test/test_run.py Thu May 22 10:40:08 2008 +0000 +++ b/test/test_run.py Thu May 22 12:44:43 2008 +0000 @@ -28,3 +28,23 @@ self.assertEquals(exc.returncode, 1) else: self.fail("call did not raise an exception") + + def test_call_extra_env(self): + """Test call with the extra_env parameter""" + subprocess_cmd = [sys.executable, "-c", + "import sys, os;" + "value = os.environ.get('TREEPKG_TEST');" + "sys.exit(int(value != 'xyzzy'))" + ] + # sanity check that the extra environment variable we use for + # the test is not set yet + self.assertRaises(SubprocessError, call, subprocess_cmd) + + # the actual test + try: + call(subprocess_cmd, extra_env=dict(TREEPKG_TEST="xyzzy")) + except SubprocessError, exc: + self.fail("the extra_env variables were not set properly") + else: + # test OK + pass diff -r 37aadd33ffab -r e08b4b09d35f treepkg/run.py --- a/treepkg/run.py Thu May 22 10:40:08 2008 +0000 +++ b/treepkg/run.py Thu May 22 12:44:43 2008 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2007 by Intevation GmbH +# Copyright (C) 2007, 2008 by Intevation GmbH # Authors: # Bernhard Herzog # @@ -20,7 +20,7 @@ self.returncode = returncode -def call(command, suppress_output=False, **kw): +def call(command, suppress_output=False, extra_env=None, **kw): """Run command as a subprocess and wait until it is finished. The command should be given as a list of strings to avoid problems @@ -30,7 +30,12 @@ if suppress_output: kw["stdout"] = open(os.devnull, "w") kw["stderr"] = open(os.devnull, "w") - ret = subprocess.call(command, **kw) + env = kw.pop("env", None) + if extra_env: + if env is None: + env = os.environ.copy() + env.update(extra_env) + ret = subprocess.call(command, env=env, **kw) if ret != 0: raise SubprocessError(command, ret)