Skip to content

Commit

Permalink
Pex exits with correct code when using entrypoint (#605)
Browse files Browse the repository at this point in the history
Currently the exit code from an entrypoint is swallowed, so running pex
always exits 0.

Tested with:
```
tox -e py27-package
dist/pex27 -e pytest:main pytest -D /path/to/failing/test/dir
```

before this PR, this exits 0, after it exits 1.
  • Loading branch information
illicitonion authored and jsirois committed Oct 19, 2018
1 parent de35f7e commit eac0233
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 6 deletions.
12 changes: 6 additions & 6 deletions pex/pex.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,8 +278,7 @@ def patch_all(path, path_importer_cache, modules):

def _wrap_coverage(self, runner, *args):
if not self._vars.PEX_COVERAGE and self._vars.PEX_COVERAGE_FILENAME is None:
runner(*args)
return
return runner(*args)

try:
import coverage
Expand All @@ -296,7 +295,7 @@ def _wrap_coverage(self, runner, *args):
cov.start()

try:
runner(*args)
return runner(*args)
finally:
TRACER.log('Stopping coverage')
cov.stop()
Expand All @@ -310,8 +309,7 @@ def _wrap_coverage(self, runner, *args):

def _wrap_profiling(self, runner, *args):
if not self._vars.PEX_PROFILE and self._vars.PEX_PROFILE_FILENAME is None:
runner(*args)
return
return runner(*args)

pex_profile_filename = self._vars.PEX_PROFILE_FILENAME
pex_profile_sort = self._vars.PEX_PROFILE_SORT
Expand Down Expand Up @@ -348,7 +346,9 @@ def execute(self):
self.patch_sys(pex_inherit_path)
working_set = self._activate()
self.patch_pkg_resources(working_set)
self._wrap_coverage(self._wrap_profiling, self._execute)
exit_code = self._wrap_coverage(self._wrap_profiling, self._execute)
if exit_code:
sys.exit(exit_code)
except Exception:
# Allow the current sys.excepthook to handle this app exception before we tear things down in
# finally, then reraise so that the exit status is reflected correctly.
Expand Down
20 changes: 20 additions & 0 deletions tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,26 @@ def test_pex_manylinux_runtime():
assert out.strip() == '[1, 2, 3]'


def test_pex_exit_code_propagation():
"""Tests exit code propagation."""
test_stub = dedent(
"""
def test_fail():
assert False
"""
)

with temporary_content({'tester.py': test_stub}) as output_dir:
pex_path = os.path.join(output_dir, 'test.pex')
tester_path = os.path.join(output_dir, 'tester.py')
results = run_pex_command(['pytest==3.9.1',
'-e', 'pytest:main',
'-o', pex_path])
results.assert_success()

assert subprocess.call([pex_path, os.path.realpath(tester_path)]) == 1


@pytest.mark.skipif(NOT_CPYTHON27)
def test_platform_specific_inline_egg_resolution():
with temporary_dir() as td:
Expand Down

0 comments on commit eac0233

Please sign in to comment.