diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py index fc24a1d9724..6aa90a375b9 100644 --- a/lib/spack/spack/test/concretize.py +++ b/lib/spack/spack/test/concretize.py @@ -2,6 +2,7 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os import sys import jinja2 @@ -1138,6 +1139,44 @@ def test_external_package_versions(self, spec_str, is_external, expected): assert s.external == is_external assert s.satisfies(expected) + def test_reuse_does_not_overwrite_root_dev_specs(self, tmpdir, mock_packages, install_mockery, mock_fetch): + with tmpdir.as_cwd(): + # potential parameters + package_name = 'dev-build-test-install' + package_version = '0.0.0' + # have to setup paths to get concretization to work + dev_path = '%s/%s' % (tmpdir.strpath, package_name) + os.makedirs(dev_path) + spec_str = package_name + dev_spec_str = '%s@%s dev_path=%s' % (package_name, + package_version, dev_path) + # concretize and install a non-dev version + s = Spec(spec_str).concretized() + s.package.do_install(fake=True) + # concretize a dev version + dev_spec = Spec(dev_spec_str).concretized(reuse=True) + assert dev_spec.dag_hash() is not s.dag_hash() + + def test_reuse_does_not_overwrite_dependent_dev_specs(self, tmpdir, mock_packages, install_mockery, mock_fetch): + with tmpdir.as_cwd(): + # potential parameters + root_spec = 'dev-build-test-dependent' + package_name = 'dev-build-test-install' + package_version = '0.0.0' + # have to setup paths to get concretization to work + dev_path = '%s/%s' % (tmpdir.strpath, package_name) + os.makedirs(dev_path) + spec_str = root_spec + dev_spec_str = '%s ^%s@%s dev_path=%s' % (root_spec, package_name, + package_version, dev_path) + # concretize and install a non-dev version + s = Spec(spec_str).concretized() + s.package.do_install(fake=True) + # concretize a dev version + dev_spec = Spec(dev_spec_str).concretized(reuse=True) + assert dev_spec.dag_hash() is not s.dag_hash() + + @pytest.mark.regression('20292') @pytest.mark.parametrize('context', [ {'add_variant': True, 'delete_variant': False}, @@ -1145,7 +1184,7 @@ def test_external_package_versions(self, spec_str, is_external, expected): {'add_variant': True, 'delete_variant': True} ]) @pytest.mark.xfail() - def test_reuse_installed_packages( + def test_reuse_installed_packages_when_package_def_changes( self, context, mutable_database, repo_with_changing_recipe ): # Install a spec