diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py index 4f77e618cefadf83aaba9d75cc6adc1712fd6825..60bc18a5b8073fa85772f49329db78828deee455 100644 --- a/lib/spack/spack/directory_layout.py +++ b/lib/spack/spack/directory_layout.py @@ -78,10 +78,13 @@ def path_for_spec(self, spec): if spec.external: return spec.external_path - if self.check_upstream and spec.package.installed_upstream: - raise SpackError( - "Internal error: attempted to call path_for_spec on" - " upstream-installed package.") + if self.check_upstream: + upstream, record = spack.store.db.query_by_spec_hash( + spec.dag_hash()) + if upstream: + raise SpackError( + "Internal error: attempted to call path_for_spec on" + " upstream-installed package.") path = self.relative_path_for_spec(spec) assert(not path.startswith(self.root)) diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py index 79287c2adfdfacf537b2965b8cdda93e55a2f9d1..8e1d5c794069db2975a70732496f7b2410e8c23e 100644 --- a/lib/spack/spack/test/install.py +++ b/lib/spack/spack/test/install.py @@ -12,17 +12,27 @@ from spack.spec import Spec -def test_install_and_uninstall(install_mockery, mock_fetch): +def test_install_and_uninstall(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 = spack.repo.get(spec) + 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 + pkg.do_uninstall() except Exception: pkg.remove_prefix()