summaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorMathew Robinson <chasinglogic@gmail.com>2019-06-03 17:44:11 (GMT)
committerMathew Robinson <chasinglogic@gmail.com>2019-06-10 17:28:55 (GMT)
commit25e993fed6a759758348dea8293ea000c3bf12ec (patch)
tree7ce44d338d1138e8037dfe651b93c1c83877fd7a /src/engine
parent6d5d4d70e8e814465405c5ea2e6901deefddcdaa (diff)
downloadSCons-25e993fed6a759758348dea8293ea000c3bf12ec.zip
SCons-25e993fed6a759758348dea8293ea000c3bf12ec.tar.gz
SCons-25e993fed6a759758348dea8293ea000c3bf12ec.tar.bz2
Don't hide exceptions when command does not exist
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/SCons/Action.py7
-rw-r--r--src/engine/SCons/ActionTests.py17
2 files changed, 21 insertions, 3 deletions
diff --git a/src/engine/SCons/Action.py b/src/engine/SCons/Action.py
index d1ab362..3ec8a4c 100644
--- a/src/engine/SCons/Action.py
+++ b/src/engine/SCons/Action.py
@@ -808,7 +808,7 @@ def _subproc(scons_env, cmd, error = 'ignore', **kw):
kw['env'] = new_env
try:
- pobj = subprocess.Popen(cmd, **kw)
+ pobj = subprocess.Popen(cmd, **kw)
except EnvironmentError as e:
if error == 'raise': raise
# return a dummy Popen instance that only returns error
@@ -826,9 +826,10 @@ def _subproc(scons_env, cmd, error = 'ignore', **kw):
finally:
# clean up open file handles stored in parent's kw
for k, v in kw.items():
- if hasattr(v, 'close'):
+ if inspect.ismethod(getattr(v, 'close', None)):
v.close()
- return pobj
+
+ return pobj
class CommandAction(_ActionAction):
diff --git a/src/engine/SCons/ActionTests.py b/src/engine/SCons/ActionTests.py
index 34fea45..3054368 100644
--- a/src/engine/SCons/ActionTests.py
+++ b/src/engine/SCons/ActionTests.py
@@ -44,6 +44,7 @@ import re
import sys
import types
import unittest
+import subprocess
import SCons.Action
import SCons.Environment
@@ -2273,6 +2274,22 @@ class ObjectContentsTestCase(unittest.TestCase):
assert c == expected[sys.version_info[:2]], "Got\n" + repr(c) + "\nExpected \n" + "\n" + repr(expected[
sys.version_info[:2]])
+ def test_uncaught_exception_bubbles(self):
+ """Test that _subproc bubbles uncaught exceptions"""
+ try:
+ pobj = SCons.Action._subproc(Environment(),
+ None,
+ stdin='devnull',
+ stderr='devnull',
+ stdout=subprocess.PIPE)
+ pobj.wait()
+ except EnvironmentError:
+ pass
+ except Exception:
+ # pass the test
+ return
+
+ raise Exception("expected a non-EnvironmentError exception")
if __name__ == "__main__":
unittest.main()