diff options
-rw-r--r-- | lib/spack/spack/modules/common.py | 6 | ||||
-rw-r--r-- | lib/spack/spack/test/modules/common.py | 31 |
2 files changed, 36 insertions, 1 deletions
diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index d6fb536e8f..c09a225116 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -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 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 .upstream_module(spec, module_type)) if not module: diff --git a/lib/spack/spack/test/modules/common.py b/lib/spack/spack/test/modules/common.py index cc2eb61d0b..f2cb60e1db 100644 --- a/lib/spack/spack/test/modules/common.py +++ b/lib/spack/spack/test/modules/common.py @@ -11,6 +11,7 @@ import collections import spack.spec import spack.modules.tcl from spack.modules.common import UpstreamModuleIndex +from spack.spec import Spec import spack.error @@ -183,3 +184,33 @@ module_index: assert m1_path == '/path/to/a' finally: 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 |