Don't check package.installed in _mark_concrete if value=True (#5634)
* spec and spec.package.spec can refer to different objects in the database. When these two instances of spec differ in terms of the value of the 'concrete' property, Spec._mark_concrete can fail when checking Spec.package.installed (which requires package.spec to be concrete). This skips the check for spec.package.installed when _mark_concrete is called with 'True' (in other words, when the database is marking all specs as being concrete). * add test to confirm this fixes #5293
This commit is contained in:
parent
3d8d3e8882
commit
b08d457dfd
@ -1888,7 +1888,7 @@ def _mark_concrete(self, value=True):
|
|||||||
unless there is a need to force a spec to be concrete.
|
unless there is a need to force a spec to be concrete.
|
||||||
"""
|
"""
|
||||||
for s in self.traverse(deptype_query=all):
|
for s in self.traverse(deptype_query=all):
|
||||||
if s.concrete and s.package.installed:
|
if (not value) and s.concrete and s.package.installed:
|
||||||
continue
|
continue
|
||||||
s._normal = value
|
s._normal = value
|
||||||
s._concrete = value
|
s._concrete = value
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
import pytest
|
import pytest
|
||||||
import spack
|
import spack
|
||||||
import spack.store
|
import spack.store
|
||||||
|
from spack.test.conftest import MockPackageMultiRepo
|
||||||
from spack.util.executable import Executable
|
from spack.util.executable import Executable
|
||||||
from llnl.util.tty.colify import colify
|
from llnl.util.tty.colify import colify
|
||||||
|
|
||||||
@ -380,6 +381,22 @@ def fail_while_writing():
|
|||||||
assert install_db.query('cmake', installed=any) == []
|
assert install_db.query('cmake', installed=any) == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_115_reindex_with_packages_not_in_repo(database, refresh_db_on_exit):
|
||||||
|
install_db = database.mock.db
|
||||||
|
|
||||||
|
saved_repo = spack.repo
|
||||||
|
# Dont add any package definitions to this repository, the idea is that
|
||||||
|
# packages should not have to be defined in the repository once they are
|
||||||
|
# installed
|
||||||
|
mock_repo = MockPackageMultiRepo([])
|
||||||
|
try:
|
||||||
|
spack.repo = mock_repo
|
||||||
|
spack.store.db.reindex(spack.store.layout)
|
||||||
|
_check_db_sanity(install_db)
|
||||||
|
finally:
|
||||||
|
spack.repo = saved_repo
|
||||||
|
|
||||||
|
|
||||||
def test_external_entries_in_db(database):
|
def test_external_entries_in_db(database):
|
||||||
install_db = database.mock.db
|
install_db = database.mock.db
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user