diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/package_base.py | 8 | ||||
-rw-r--r-- | lib/spack/spack/test/install.py | 16 |
2 files changed, 17 insertions, 7 deletions
diff --git a/lib/spack/spack/package_base.py b/lib/spack/spack/package_base.py index f88d907974..b4763bfab9 100644 --- a/lib/spack/spack/package_base.py +++ b/lib/spack/spack/package_base.py @@ -33,7 +33,7 @@ import six 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 @@ class PackageBase(six.with_metaclass(PackageMeta, PackageViewMixin, object)): 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) diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py index 845bdd92b2..d1f11aa4f4 100644 --- a/lib/spack/spack/test/install.py +++ b/lib/spack/spack/test/install.py @@ -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() |