summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernát Gábor <gaborjbernat@gmail.com>2019-03-29 13:03:58 +0000
committerGitHub <noreply@github.com>2019-03-29 13:03:58 +0000
commit3f81152225110e6aa00f5592cc463f6b1351edaf (patch)
tree1013a67efb9ed4f194b0e2396e153df3d1357b7b
parent47476e13e55c3ae8994574d6898fd58a0792dd75 (diff)
downloadtox-git-3f81152225110e6aa00f5592cc463f6b1351edaf.tar.gz
#1228 do not print traceback on provisioned tox command fail (#1230)
👍
-rw-r--r--docs/changelog/1228.bugfix.rst1
-rw-r--r--src/tox/_pytestplugin.py11
-rw-r--r--src/tox/session/__init__.py10
-rw-r--r--src/tox/session/commands/provision.py8
-rw-r--r--tests/integration/test_provision_int.py11
5 files changed, 28 insertions, 13 deletions
diff --git a/docs/changelog/1228.bugfix.rst b/docs/changelog/1228.bugfix.rst
new file mode 100644
index 00000000..cdd5e7c8
--- /dev/null
+++ b/docs/changelog/1228.bugfix.rst
@@ -0,0 +1 @@
+Do not print exception traceback when the provisioned tox fails - by :user:`gaborbernat`
diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py
index cca7f991..14d166bd 100644
--- a/src/tox/_pytestplugin.py
+++ b/src/tox/_pytestplugin.py
@@ -5,6 +5,7 @@ import subprocess
import sys
import textwrap
import time
+import traceback
from collections import OrderedDict
from fnmatch import fnmatch
@@ -120,18 +121,18 @@ def cmd(request, monkeypatch, capfd):
with RunResult(argv, capfd) as result:
_collect_session(result)
+ # noinspection PyBroadException
try:
tox.session.main([str(x) for x in argv])
assert False # this should always exist with SystemExit
except SystemExit as exception:
result.ret = exception.code
except OSError as e:
+ traceback.print_exc()
result.ret = e.errno
- except tox.exception.InvocationError as exception:
- result.ret = exception.exit_code
- if exception.out is not None:
- with open(exception.out, "rt") as file_handler:
- tox.reporter.verbosity0(file_handler.read())
+ except Exception:
+ traceback.print_exc()
+ result.ret = 1
return result
def _collect_session(result):
diff --git a/src/tox/session/__init__.py b/src/tox/session/__init__.py
index 5fdc300f..2a2079cb 100644
--- a/src/tox/session/__init__.py
+++ b/src/tox/session/__init__.py
@@ -65,10 +65,10 @@ def main(args):
ensure_empty_dir(config.logdir)
with set_os_env_var("TOX_WORK_DIR", config.toxworkdir):
session = build_session(config)
- retcode = session.runcommand()
- if retcode is None:
- retcode = 0
- raise SystemExit(retcode)
+ exit_code = session.runcommand()
+ if exit_code is None:
+ exit_code = 0
+ raise SystemExit(exit_code)
except tox.exception.BadRequirement:
raise SystemExit(1)
except KeyboardInterrupt:
@@ -179,7 +179,7 @@ class Session(object):
show_description = reporter.has_level(reporter.Verbosity.DEFAULT)
if self.config.run_provision:
provision_tox_venv = self.getvenv(self.config.provision_tox_env)
- provision_tox(provision_tox_venv, self.config.args)
+ return provision_tox(provision_tox_venv, self.config.args)
else:
if self.config.option.showconfig:
self.showconfig()
diff --git a/src/tox/session/commands/provision.py b/src/tox/session/commands/provision.py
index 7237a535..3f0ac619 100644
--- a/src/tox/session/commands/provision.py
+++ b/src/tox/session/commands/provision.py
@@ -1,12 +1,18 @@
"""In case the tox environment is not correctly setup provision it and delegate execution"""
from __future__ import absolute_import, unicode_literals
+from tox.exception import InvocationError
+
def provision_tox(provision_venv, args):
ensure_meta_env_up_to_date(provision_venv)
with provision_venv.new_action("provision") as action:
provision_args = [str(provision_venv.envconfig.envpython), "-m", "tox"] + args
- action.popen(provision_args, redirect=False)
+ try:
+ action.popen(provision_args, redirect=False, report_fail=False)
+ return 0
+ except InvocationError as exception:
+ return exception.exit_code
def ensure_meta_env_up_to_date(provision_venv):
diff --git a/tests/integration/test_provision_int.py b/tests/integration/test_provision_int.py
index 2c8a75ea..22e76b4b 100644
--- a/tests/integration/test_provision_int.py
+++ b/tests/integration/test_provision_int.py
@@ -23,9 +23,16 @@ def test_provision_missing(initproj, cmd):
"""
},
)
- result = cmd("-q", "-q")
+ result = cmd("-e", "py")
result.assert_fail()
- meta_python = Path(result.out.strip())
+ assert "tox.exception.InvocationError" not in result.output()
+ assert not result.err
+ assert ".tox create: " in result.out
+ assert ".tox installdeps: " in result.out
+ assert "py create: " in result.out
+
+ at = next(at for at, l in enumerate(result.outlines) if l.startswith("py run-test: ")) + 1
+ meta_python = Path(result.outlines[at])
assert meta_python.exists()