summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2019-06-15 21:43:56 (GMT)
committerWilliam Deegan <bill@baddogconsulting.com>2019-06-15 21:43:56 (GMT)
commit52d388e565873e1f532f9c36617f97aa58d78622 (patch)
treefa7e863fca8d273366ec1ba0cfbd64fbca763797 /src
parent961181aecd44bee3fb3e092e5dacaecb73bddffc (diff)
parent9f7705302f9cedb2afb4f071c8f84db59ebfea25 (diff)
downloadSCons-52d388e565873e1f532f9c36617f97aa58d78622.zip
SCons-52d388e565873e1f532f9c36617f97aa58d78622.tar.gz
SCons-52d388e565873e1f532f9c36617f97aa58d78622.tar.bz2
Merge branch 'master' of github.com:SCons/scons
Diffstat (limited to 'src')
-rwxr-xr-xsrc/CHANGES.txt1
-rw-r--r--src/engine/SCons/Action.py7
-rw-r--r--src/engine/SCons/ActionTests.py17
3 files changed, 22 insertions, 3 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index d09f01d..846d860 100755
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -69,6 +69,7 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
From Mathew Robinson:
- Update cache debug output to include cache hit rate.
+ - No longer unintentionally hide exceptions in Action.py
RELEASE 3.0.5 - Mon, 26 Mar 2019 15:04:42 -0700
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()