Skip to content

Commit 6a07a0d

Browse files
also create symlinks for default modules in class module folders
1 parent f6bb651 commit 6a07a0d

File tree

2 files changed

+43
-14
lines changed

2 files changed

+43
-14
lines changed

easybuild/framework/easyblock.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2604,7 +2604,8 @@ def _set_module_as_default(self, fake=False):
26042604
dry_run_msg("Marked %s v%s as default version" % (self.name, version))
26052605
else:
26062606
mod_folderpath = os.path.dirname(self.module_generator.get_module_filepath(fake=fake))
2607-
self.module_generator.set_as_default(mod_folderpath, version)
2607+
mod_symlink_paths = ActiveMNS().det_module_symlink_paths(self.cfg)
2608+
self.module_generator.set_as_default(mod_folderpath, version, mod_symlink_paths, fake)
26082609

26092610
def cleanup_step(self):
26102611
"""

easybuild/tools/module_generator.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,13 @@ def set_alias(self, key, value):
415415
"""
416416
raise NotImplementedError
417417

418-
def set_as_default(self, module_folder_path, module_version):
418+
def set_as_default(self, module_folder_path, module_version, mod_symlink_paths=[], fake=False):
419419
"""
420420
Set generated module as default module
421421
422422
:param module_folder_path: module folder path, e.g. $HOME/easybuild/modules/all/Bison
423423
:param module_version: module version, e.g. 3.0.4
424+
:param mod_symlink_paths: list of paths in which symlinks to module files must be created
424425
"""
425426
raise NotImplementedError
426427

@@ -872,18 +873,34 @@ def set_alias(self, key, value):
872873
# quotes are needed, to ensure smooth working of EBDEVEL* modulefiles
873874
return 'set-alias\t%s\t\t%s\n' % (key, quote_str(value, tcl=True))
874875

875-
def set_as_default(self, module_folder_path, module_version):
876+
def set_as_default(self, module_folder_path, module_version, mod_symlink_paths=[], fake=False):
876877
"""
877878
Create a .version file inside the package module folder in order to set the default version for TMod
878879
879880
:param module_folder_path: module folder path, e.g. $HOME/easybuild/modules/all/Bison
880881
:param module_version: module version, e.g. 3.0.4
882+
:param mod_symlink_paths: list of paths in which symlinks to module files must be created
881883
"""
882884
txt = self.MODULE_SHEBANG + '\n'
883885
txt += 'set ModulesVersion %s\n' % module_version
884886

885887
# write the file no matter what
886-
write_file(os.path.join(module_folder_path, '.version'), txt)
888+
dot_version_path = os.path.join(module_folder_path, '.version')
889+
write_file(dot_version_path, txt)
890+
891+
# create symlink to .version file in class module folders
892+
if not fake:
893+
for mod_symlink_path in mod_symlink_paths:
894+
module_name = os.path.basename(module_folder_path)
895+
class_module_folder = os.path.join(install_path('mod'), mod_symlink_path, module_name)
896+
dot_version_link_path = os.path.join(class_module_folder, '.version')
897+
if os.path.islink(dot_version_link_path):
898+
link_target = resolve_path(dot_version_link_path)
899+
remove_file(dot_version_link_path)
900+
self.log.info("Removed default version marking from %s.", link_target)
901+
elif os.path.exists(dot_version_link_path):
902+
raise EasyBuildError('Found an unexpected file named .version in dir %s' % class_module_folder)
903+
symlink(dot_version_path, dot_version_link_path, use_abspath_source=True)
887904

888905
def set_environment(self, key, value, relpath=False):
889906
"""
@@ -1277,24 +1294,35 @@ def set_alias(self, key, value):
12771294
# quotes are needed, to ensure smooth working of EBDEVEL* modulefiles
12781295
return 'set_alias("%s", %s)\n' % (key, quote_str(value))
12791296

1280-
def set_as_default(self, module_folder_path, module_version):
1297+
def set_as_default(self, module_folder_path, module_version, mod_symlink_paths=[], fake=False):
12811298
"""
12821299
Create a symlink named 'default' inside the package's module folder in order to set the default module version
12831300
12841301
:param module_folder_path: module folder path, e.g. $HOME/easybuild/modules/all/Bison
12851302
:param module_version: module version, e.g. 3.0.4
1303+
:param mod_symlink_paths: list of paths in which symlinks to module files must be created
12861304
"""
1287-
default_filepath = os.path.join(module_folder_path, 'default')
1305+
def create_default_symlink(module_folder_path):
1306+
default_filepath = os.path.join(module_folder_path, 'default')
12881307

1289-
if os.path.islink(default_filepath):
1290-
link_target = resolve_path(default_filepath)
1291-
remove_file(default_filepath)
1292-
self.log.info("Removed default version marking from %s.", link_target)
1293-
elif os.path.exists(default_filepath):
1294-
raise EasyBuildError('Found an unexpected file named default in dir %s' % module_folder_path)
1308+
if os.path.islink(default_filepath):
1309+
link_target = resolve_path(default_filepath)
1310+
remove_file(default_filepath)
1311+
self.log.info("Removed default version marking from %s.", link_target)
1312+
elif os.path.exists(default_filepath):
1313+
raise EasyBuildError('Found an unexpected file named default in dir %s' % module_folder_path)
12951314

1296-
symlink(module_version + self.MODULE_FILE_EXTENSION, default_filepath, use_abspath_source=False)
1297-
self.log.info("Module default version file written to point to %s", default_filepath)
1315+
symlink(module_version + self.MODULE_FILE_EXTENSION, default_filepath, use_abspath_source=False)
1316+
self.log.info("Module default version file written to point to %s", default_filepath)
1317+
1318+
create_default_symlink(module_folder_path)
1319+
1320+
# also create symlinks in class module folders
1321+
if not fake:
1322+
for mod_symlink_path in mod_symlink_paths:
1323+
module_name = os.path.basename(module_folder_path)
1324+
module_folder_path = os.path.join(install_path('mod'), mod_symlink_path, module_name)
1325+
create_default_symlink(module_folder_path)
12981326

12991327
def set_environment(self, key, value, relpath=False):
13001328
"""

0 commit comments

Comments
 (0)