Skip to content
Snippets Groups Projects
Commit 654914d5 authored by Andrew W Elble's avatar Andrew W Elble Committed by Todd Gamblin
Browse files

Fix for being able to 'spack load' packages that have been renamed. (#14348)

* Fix for being able to 'spack load' packages that have been renamed.

* tests: add test for 'spack load' of a installed, but renamed/deleted package
parent 3753424a
Branches
Tags
No related merge requests found
...@@ -342,7 +342,11 @@ def get_module(module_type, spec, get_full_path, required=True): ...@@ -342,7 +342,11 @@ def get_module(module_type, spec, get_full_path, required=True):
The module name or path. May return ``None`` if the module is not The module name or path. May return ``None`` if the module is not
available. available.
""" """
if spec.package.installed_upstream: try:
upstream = spec.package.installed_upstream
except spack.repo.UnknownPackageError:
upstream, record = spack.store.db.query_by_spec_hash(spec.dag_hash())
if upstream:
module = (spack.modules.common.upstream_module_index module = (spack.modules.common.upstream_module_index
.upstream_module(spec, module_type)) .upstream_module(spec, module_type))
if not module: if not module:
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
import spack.spec import spack.spec
import spack.modules.tcl import spack.modules.tcl
from spack.modules.common import UpstreamModuleIndex from spack.modules.common import UpstreamModuleIndex
from spack.spec import Spec
import spack.error import spack.error
...@@ -183,3 +184,33 @@ def test_get_module_upstream(): ...@@ -183,3 +184,33 @@ def test_get_module_upstream():
assert m1_path == '/path/to/a' assert m1_path == '/path/to/a'
finally: finally:
spack.modules.common.upstream_module_index = old_index spack.modules.common.upstream_module_index = old_index
def test_load_installed_package_not_in_repo(install_mockery, mock_fetch,
monkeypatch):
# Get a basic concrete spec for the trivial install package.
spec = Spec('trivial-install-test-package')
spec.concretize()
assert spec.concrete
# Get the package
pkg = spec.package
def find_nothing(*args):
raise spack.repo.UnknownPackageError(
'Repo package access is disabled for test')
try:
pkg.do_install()
spec._package = None
monkeypatch.setattr(spack.repo, 'get', find_nothing)
with pytest.raises(spack.repo.UnknownPackageError):
spec.package
module_path = spack.modules.common.get_module('tcl', spec, True)
assert module_path
pkg.do_uninstall()
except Exception:
pkg.remove_prefix()
raise
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment