Added blacklisting of implicit modules in docs + regression tests

fixes #4400

The feature requested in #4400 was already part of the module file
configuration, but it was neither tested nor documented. This
commit takes care of adding a few lines in the documentation and a
regression test.
This commit is contained in:
Massimiliano Culpo 2018-07-09 11:04:37 +02:00 committed by Todd Gamblin
parent ff83003eaf
commit 7a49ba56b6
5 changed files with 52 additions and 1 deletions

View File

@ -555,6 +555,26 @@ you'll see that now the module for ``gcc@7.2.0`` has reappeared:
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
An additional possibility that you can leverage to unclutter the environment
is that of preventing the generation of module files for implicitly installed
packages. In this case all one needs to do is to add the following line:
.. code-block:: yaml
:emphasize-lines: 3
modules:
tcl:
blacklist_implicits: true
whitelist:
- gcc
blacklist:
- '%gcc@5.4.0'
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
to ``modules.yaml`` and regenerate the module file tree as above.
^^^^^^^^^^^^^^^^^^^^^^^^^
Change module file naming
^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -121,6 +121,10 @@
'$ref': '#/definitions/array_of_strings'},
'blacklist': {
'$ref': '#/definitions/array_of_strings'},
'blacklist_implicits': {
'type': 'boolean',
'default': False
},
'naming_scheme': {
'type': 'string' # Can we be more specific here?
}

View File

@ -327,7 +327,7 @@ def _populate(mock_db):
def _install(spec):
s = spack.spec.Spec(spec).concretized()
pkg = spack.repo.get(s)
pkg.do_install(fake=True)
pkg.do_install(fake=True, explicit=True)
# Transaction used to avoid repeated writes.
with mock_db.write_transaction():

View File

@ -0,0 +1,6 @@
enable:
- tcl
tcl:
blacklist_implicits: true
all:
autoload: 'direct'

View File

@ -274,3 +274,24 @@ def test_extend_context(
short_description = 'module-whatis "This package updates the context for TCL modulefiles."' # NOQA: ignore=E501
assert short_description in content
@pytest.mark.regression('4400')
@pytest.mark.db
def test_blacklist_implicits(
self, modulefile_content, module_configuration, database
):
module_configuration('blacklist_implicits')
# mpileaks has been installed explicitly when setting up
# the tests database
mpileaks_specs = database.query('mpileaks')
for item in mpileaks_specs:
writer = writer_cls(item)
assert not writer.conf.blacklisted
# callpath is a dependency of mpileaks, and has been pulled
# in implicitly
callpath_specs = database.query('callpath')
for item in callpath_specs:
writer = writer_cls(item)
assert writer.conf.blacklisted