Fix empty install prefix post-install sanity check (#30983)

This commit is contained in:
Jordan Galby 2022-06-07 16:17:33 +02:00 committed by GitHub
parent ffd63c5de1
commit e74d85a524
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 7 deletions

View File

@ -33,7 +33,7 @@
import llnl.util.filesystem as fsys
import llnl.util.tty as tty
from llnl.util.lang import memoized, nullcontext
from llnl.util.lang import match_predicate, memoized, nullcontext
from llnl.util.link_tree import LinkTree
import spack.compilers
@ -2178,10 +2178,8 @@ def check_paths(path_list, filetype, predicate):
check_paths(self.sanity_check_is_file, 'file', os.path.isfile)
check_paths(self.sanity_check_is_dir, 'directory', os.path.isdir)
installed = set(os.listdir(self.prefix))
installed.difference_update(
spack.store.layout.hidden_file_regexes)
if not installed:
ignore_file = match_predicate(spack.store.layout.hidden_file_regexes)
if all(map(ignore_file, os.listdir(self.prefix))):
raise InstallError(
"Install failed for %s. Nothing was installed!" % self.name)

View File

@ -379,9 +379,8 @@ def test_failing_build(install_mockery, mock_fetch, capfd):
spec = Spec('failing-build').concretized()
pkg = spec.package
with pytest.raises(spack.build_environment.ChildError):
with pytest.raises(spack.build_environment.ChildError, match='Expected failure'):
pkg.do_install()
assert 'InstallError: Expected Failure' in capfd.readouterr()[0]
class MockInstallError(spack.error.SpackError):
@ -612,3 +611,16 @@ def test_install_error():
assert exc.__class__.__name__ == 'InstallError'
assert exc.message == msg
assert exc.long_message == long_msg
@pytest.mark.disable_clean_stage_check
def test_empty_install_sanity_check_prefix(
monkeypatch, install_mockery, mock_fetch, mock_packages
):
"""Test empty install triggers sanity_check_prefix."""
spec = Spec('failing-empty-install').concretized()
with pytest.raises(
spack.build_environment.ChildError,
match='Nothing was installed'
):
spec.package.do_install()

View File

@ -0,0 +1,16 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class FailingEmptyInstall(Package):
"""This package installs nothing, install should fail."""
homepage = "http://www.example.com/trivial_install"
url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz"
version('1.0', '0123456789abcdef0123456789abcdef')
def install(self, spec, prefix):
pass