diff --git a/CHANGES b/CHANGES index e66f11cbf7e..ce1c417ad1d 100644 --- a/CHANGES +++ b/CHANGES @@ -18,6 +18,8 @@ Deprecated Features added -------------- +* #11451: Improve the traceback displayed when using :option:`-T` in parallel + builds. Patch by Bénédikt Tran * #11415: Add a checksum to JavaScript and CSS asset URIs included within generated HTML, using the CRC32 algorithm. * :meth:`~sphinx.application.Sphinx.require_sphinx` now allows the version diff --git a/sphinx/cmd/build.py b/sphinx/cmd/build.py index ecc2a7d2cdd..65d6023bee4 100644 --- a/sphinx/cmd/build.py +++ b/sphinx/cmd/build.py @@ -18,7 +18,7 @@ import sphinx.locale from sphinx import __display_version__ from sphinx.application import Sphinx -from sphinx.errors import SphinxError +from sphinx.errors import SphinxError, SphinxParallelError from sphinx.locale import __ from sphinx.util import Tee from sphinx.util.console import color_terminal, nocolor, red, terminal_safe # type: ignore @@ -41,8 +41,13 @@ def handle_exception( else: print(file=stderr) if args.verbosity or args.traceback: - traceback.print_exc(None, stderr) - print(file=stderr) + exc_info = sys.exc_info() + if isinstance(exc_info[1], SphinxParallelError): + exc_format = '(Error in parallel process)\n' + exc_info[1].traceback + print(exc_format, file=stderr) + else: + traceback.print_exception(*exc_info, limit=None, file=stderr, chain=True) + print(file=stderr) if isinstance(exception, KeyboardInterrupt): print(__('Interrupted!'), file=stderr) elif isinstance(exception, SystemMessage):