summaryrefslogtreecommitdiff
path: root/lib/spack/spack/test/views.py
blob: 4df1da7e4080fc75d99778abfbaef06ccfcd164d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Copyright 2013-2023 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

import pytest

from spack.directory_layout import DirectoryLayout
from spack.filesystem_view import SimpleFilesystemView, YamlFilesystemView
from spack.spec import Spec


@pytest.mark.not_on_windows("Not supported on Windows (yet)")
def test_remove_extensions_ordered(install_mockery, mock_fetch, tmpdir):
    view_dir = str(tmpdir.join("view"))
    layout = DirectoryLayout(view_dir)
    view = YamlFilesystemView(view_dir, layout)
    e2 = Spec("extension2").concretized()
    e2.package.do_install()
    view.add_specs(e2)

    e1 = e2["extension1"]
    view.remove_specs(e1, e2)


@pytest.mark.regression("32456")
def test_view_with_spec_not_contributing_files(mock_packages, tmpdir):
    view_dir = os.path.join(str(tmpdir), "view")
    os.mkdir(view_dir)

    layout = DirectoryLayout(view_dir)
    view = SimpleFilesystemView(view_dir, layout)

    a = Spec("a")
    b = Spec("b")
    a.prefix = os.path.join(tmpdir, "a")
    b.prefix = os.path.join(tmpdir, "b")
    a._mark_concrete()
    b._mark_concrete()

    # Create directory structure for a and b, and view
    os.makedirs(a.prefix.subdir)
    os.makedirs(b.prefix.subdir)
    os.makedirs(os.path.join(a.prefix, ".spack"))
    os.makedirs(os.path.join(b.prefix, ".spack"))

    # Add files to b's prefix, but not to a's
    with open(b.prefix.file, "w") as f:
        f.write("file 1")

    with open(b.prefix.subdir.file, "w") as f:
        f.write("file 2")

    # In previous versions of Spack we incorrectly called add_files_to_view
    # with b's merge map. It shouldn't be called at all, since a has no
    # files to add to the view.
    def pkg_a_add_files_to_view(view, merge_map, skip_if_exists=True):
        assert False, "There shouldn't be files to add"

    a.package.add_files_to_view = pkg_a_add_files_to_view

    # Create view and see if files are linked.
    view.add_specs(a, b)
    assert os.path.lexists(os.path.join(view_dir, "file"))
    assert os.path.lexists(os.path.join(view_dir, "subdir", "file"))