Fix empty install prefix post-install sanity check (#30983)
This commit is contained in:
parent
ffd63c5de1
commit
e74d85a524
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
import llnl.util.filesystem as fsys
|
import llnl.util.filesystem as fsys
|
||||||
import llnl.util.tty as tty
|
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
|
from llnl.util.link_tree import LinkTree
|
||||||
|
|
||||||
import spack.compilers
|
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_file, 'file', os.path.isfile)
|
||||||
check_paths(self.sanity_check_is_dir, 'directory', os.path.isdir)
|
check_paths(self.sanity_check_is_dir, 'directory', os.path.isdir)
|
||||||
|
|
||||||
installed = set(os.listdir(self.prefix))
|
ignore_file = match_predicate(spack.store.layout.hidden_file_regexes)
|
||||||
installed.difference_update(
|
if all(map(ignore_file, os.listdir(self.prefix))):
|
||||||
spack.store.layout.hidden_file_regexes)
|
|
||||||
if not installed:
|
|
||||||
raise InstallError(
|
raise InstallError(
|
||||||
"Install failed for %s. Nothing was installed!" % self.name)
|
"Install failed for %s. Nothing was installed!" % self.name)
|
||||||
|
|
||||||
|
@ -379,9 +379,8 @@ def test_failing_build(install_mockery, mock_fetch, capfd):
|
|||||||
spec = Spec('failing-build').concretized()
|
spec = Spec('failing-build').concretized()
|
||||||
pkg = spec.package
|
pkg = spec.package
|
||||||
|
|
||||||
with pytest.raises(spack.build_environment.ChildError):
|
with pytest.raises(spack.build_environment.ChildError, match='Expected failure'):
|
||||||
pkg.do_install()
|
pkg.do_install()
|
||||||
assert 'InstallError: Expected Failure' in capfd.readouterr()[0]
|
|
||||||
|
|
||||||
|
|
||||||
class MockInstallError(spack.error.SpackError):
|
class MockInstallError(spack.error.SpackError):
|
||||||
@ -612,3 +611,16 @@ def test_install_error():
|
|||||||
assert exc.__class__.__name__ == 'InstallError'
|
assert exc.__class__.__name__ == 'InstallError'
|
||||||
assert exc.message == msg
|
assert exc.message == msg
|
||||||
assert exc.long_message == long_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()
|
||||||
|
@ -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
|
Loading…
Reference in New Issue
Block a user