Blacklist implicit packages for modulefile generation (#2603)
Add the ability to the modules generation process to blacklist packages that were installed implicitly. One can still whitelist modules that were installed implicitly. This changes adds a `blacklist_implicts` boolean as a peer to the `whitelist` and `blacklist` arrays, e.g.: ``` modules: enable:: - lmod lmod: whitelist: - 'lua' - 'py-setuptools' blacklist: - '%gcc@4.8.3' blacklist_implicits: True ``` It adds a small helper in `spec.py` and then touches up the package filtering code in `modules.py`.
This commit is contained in:
parent
acb9281dbf
commit
5a836fd06e
@ -327,6 +327,10 @@ def blacklisted(self):
|
|||||||
blacklist_matches = [x
|
blacklist_matches = [x
|
||||||
for x in configuration.get('blacklist', [])
|
for x in configuration.get('blacklist', [])
|
||||||
if self.spec.satisfies(x)]
|
if self.spec.satisfies(x)]
|
||||||
|
blacklist_implicits = configuration.get('blacklist_implicits')
|
||||||
|
installed_implicitly = not self.spec._installed_explicitly()
|
||||||
|
blacklisted_as_implicit = blacklist_implicits and installed_implicitly
|
||||||
|
|
||||||
if whitelist_matches:
|
if whitelist_matches:
|
||||||
message = '\tWHITELIST : %s [matches : ' % self.spec.cshort_spec
|
message = '\tWHITELIST : %s [matches : ' % self.spec.cshort_spec
|
||||||
for rule in whitelist_matches:
|
for rule in whitelist_matches:
|
||||||
@ -341,7 +345,13 @@ def blacklisted(self):
|
|||||||
message += ' ]'
|
message += ' ]'
|
||||||
tty.debug(message)
|
tty.debug(message)
|
||||||
|
|
||||||
if not whitelist_matches and blacklist_matches:
|
if blacklisted_as_implicit:
|
||||||
|
message = '\tBLACKLISTED_AS_IMPLICIT : %s' % \
|
||||||
|
self.spec.cshort_spec
|
||||||
|
tty.debug(message)
|
||||||
|
|
||||||
|
is_blacklisted = blacklist_matches or blacklisted_as_implicit
|
||||||
|
if not whitelist_matches and is_blacklisted:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
@ -2596,6 +2596,16 @@ def _install_status(self):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _installed_explicitly(self):
|
||||||
|
"""Helper for tree to print DB install status."""
|
||||||
|
if not self.concrete:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
record = spack.store.db.get_record(self)
|
||||||
|
return record.explicit
|
||||||
|
except KeyError:
|
||||||
|
return None
|
||||||
|
|
||||||
def tree(self, **kwargs):
|
def tree(self, **kwargs):
|
||||||
"""Prints out this spec and its dependencies, tree-formatted
|
"""Prints out this spec and its dependencies, tree-formatted
|
||||||
with indentation."""
|
with indentation."""
|
||||||
|
Loading…
Reference in New Issue
Block a user