Fix missing "*.spack*" files in views (#30980)
All files/dirs containing ".spack" anywhere their name were ignored when generating a spack view. For example, this happened with the 'r' package.
This commit is contained in:
parent
69d4637671
commit
84a3d32aa3
@ -102,7 +102,7 @@ def __init__(self, root, **kwargs):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def hidden_file_regexes(self):
|
def hidden_file_regexes(self):
|
||||||
return (re.escape(self.metadata_dir),)
|
return ("^{0}$".format(re.escape(self.metadata_dir)),)
|
||||||
|
|
||||||
def relative_path_for_spec(self, spec):
|
def relative_path_for_spec(self, spec):
|
||||||
_check_concrete(spec)
|
_check_concrete(spec)
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
import spack.util.spack_yaml as s_yaml
|
import spack.util.spack_yaml as s_yaml
|
||||||
from spack.main import SpackCommand
|
from spack.main import SpackCommand
|
||||||
|
from spack.spec import Spec
|
||||||
|
|
||||||
activate = SpackCommand("activate")
|
activate = SpackCommand("activate")
|
||||||
extensions = SpackCommand("extensions")
|
extensions = SpackCommand("extensions")
|
||||||
@ -261,3 +262,34 @@ def test_view_fails_with_missing_projections_file(tmpdir):
|
|||||||
projection_file = os.path.join(str(tmpdir), "nonexistent")
|
projection_file = os.path.join(str(tmpdir), "nonexistent")
|
||||||
with pytest.raises(SystemExit):
|
with pytest.raises(SystemExit):
|
||||||
view("symlink", "--projection-file", projection_file, viewpath, "foo")
|
view("symlink", "--projection-file", projection_file, viewpath, "foo")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("with_projection", [False, True])
|
||||||
|
@pytest.mark.parametrize("cmd", ["symlink", "copy"])
|
||||||
|
def test_view_files_not_ignored(
|
||||||
|
tmpdir, mock_packages, mock_archive, mock_fetch, config, install_mockery, cmd, with_projection
|
||||||
|
):
|
||||||
|
spec = Spec("view-not-ignored").concretized()
|
||||||
|
pkg = spec.package
|
||||||
|
pkg.do_install()
|
||||||
|
pkg.assert_installed(spec.prefix)
|
||||||
|
|
||||||
|
install("view-dir-file") # Arbitrary package to add noise
|
||||||
|
|
||||||
|
viewpath = str(tmpdir.mkdir("view_{0}".format(cmd)))
|
||||||
|
|
||||||
|
if with_projection:
|
||||||
|
proj = str(tmpdir.join("proj.yaml"))
|
||||||
|
with open(proj, "w") as f:
|
||||||
|
f.write('{"projections":{"all":"{name}"}}')
|
||||||
|
prefix_in_view = os.path.join(viewpath, "view-not-ignored")
|
||||||
|
args = ["--projection-file", proj]
|
||||||
|
else:
|
||||||
|
prefix_in_view = viewpath
|
||||||
|
args = []
|
||||||
|
|
||||||
|
view(cmd, *(args + [viewpath, "view-not-ignored", "view-dir-file"]))
|
||||||
|
pkg.assert_installed(prefix_in_view)
|
||||||
|
|
||||||
|
view("remove", viewpath, "view-not-ignored")
|
||||||
|
pkg.assert_not_installed(prefix_in_view)
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
# 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)
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
|
class ViewNotIgnored(Package):
|
||||||
|
"""Install files that should not be ignored by spack."""
|
||||||
|
|
||||||
|
homepage = "http://www.spack.org"
|
||||||
|
url = "http://www.spack.org/downloads/aml-1.0.tar.gz"
|
||||||
|
has_code = False
|
||||||
|
|
||||||
|
version("0.1.0", sha256="cc89a8768693f1f11539378b21cdca9f0ce3fc5cb564f9b3e4154a051dcea69b")
|
||||||
|
|
||||||
|
install_test_files = [
|
||||||
|
"foo.spack",
|
||||||
|
".spack.bar",
|
||||||
|
"aspack",
|
||||||
|
"bin/foo.spack",
|
||||||
|
"bin/.spack.bar",
|
||||||
|
"bin/aspack",
|
||||||
|
]
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
for test_file in self.install_test_files:
|
||||||
|
path = os.path.join(prefix, test_file)
|
||||||
|
mkdirp(os.path.dirname(path))
|
||||||
|
with open(path, "w") as f:
|
||||||
|
f.write(test_file)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def assert_installed(cls, prefix):
|
||||||
|
for test_file in cls.install_test_files:
|
||||||
|
path = os.path.join(prefix, test_file)
|
||||||
|
assert os.path.exists(path), "Missing installed file: {}".format(path)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def assert_not_installed(cls, prefix):
|
||||||
|
for test_file in cls.install_test_files:
|
||||||
|
path = os.path.join(prefix, test_file)
|
||||||
|
assert not os.path.exists(path), "File was not uninstalled: {}".format(path)
|
Loading…
Reference in New Issue
Block a user