bugfix: don't redundantly print ChildErrors (#17709)
A bug was introduced in #13100 where ChildErrors would be redundantly printed when raised during a build. We should eventually revisit error handling in builds and figure out what the right separation of responsibilities is for distributed builds, but for now just skip printing. - [x] SpackErrors were designed to be printed by the forked process, not by the parent, so check if they've already been printed. - [x] update tests
This commit is contained in:
parent
d6d839cd3e
commit
8d8cf6201b
@ -1568,9 +1568,14 @@ def install(self, **kwargs):
|
|||||||
except (Exception, SystemExit) as exc:
|
except (Exception, SystemExit) as exc:
|
||||||
# Best effort installs suppress the exception and mark the
|
# Best effort installs suppress the exception and mark the
|
||||||
# package as a failure UNLESS this is the explicit package.
|
# package as a failure UNLESS this is the explicit package.
|
||||||
err = 'Failed to install {0} due to {1}: {2}'
|
if (not isinstance(exc, spack.error.SpackError) or
|
||||||
tty.error(err.format(pkg.name, exc.__class__.__name__,
|
not exc.printed):
|
||||||
str(exc)))
|
# SpackErrors can be printed by the build process or at
|
||||||
|
# lower levels -- skip printing if already printed.
|
||||||
|
# TODO: sort out this and SpackEror.print_context()
|
||||||
|
err = 'Failed to install {0} due to {1}: {2}'
|
||||||
|
tty.error(
|
||||||
|
err.format(pkg.name, exc.__class__.__name__, str(exc)))
|
||||||
|
|
||||||
self._update_failed(task, True, exc)
|
self._update_failed(task, True, exc)
|
||||||
|
|
||||||
|
@ -180,10 +180,12 @@ def test_show_log_on_error(mock_packages, mock_archive, mock_fetch,
|
|||||||
assert install.error.pkg.name == 'build-error'
|
assert install.error.pkg.name == 'build-error'
|
||||||
assert 'Full build log:' in out
|
assert 'Full build log:' in out
|
||||||
|
|
||||||
# Message shows up for ProcessError (1), ChildError (1), and output (1)
|
print(out)
|
||||||
|
|
||||||
|
# Message shows up for ProcessError (1) and output (1)
|
||||||
errors = [line for line in out.split('\n')
|
errors = [line for line in out.split('\n')
|
||||||
if 'configure: error: cannot run C compiled programs' in line]
|
if 'configure: error: cannot run C compiled programs' in line]
|
||||||
assert len(errors) == 3
|
assert len(errors) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_install_overwrite(
|
def test_install_overwrite(
|
||||||
|
Loading…
Reference in New Issue
Block a user