def reset_modulepath(self, modpaths): """Reset $MODULEPATH with specified paths.""" for modpath in curr_module_paths(): self.modtool.remove_module_path(modpath, set_mod_paths=False) # make very sure $MODULEPATH is totally empty # some paths may be left behind, e.g. when they contain environment variables # example: "module unuse Modules/$MODULE_VERSION/modulefiles" may not yield the desired result os.environ['MODULEPATH'] = '' for modpath in modpaths: self.modtool.add_module_path(modpath, set_mod_paths=False) self.modtool.set_mod_paths()
def test_prepend_module_path(self): """Test prepend_module_path method.""" test_path = tempfile.mkdtemp(prefix=self.test_prefix) self.modtool.prepend_module_path(test_path) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_path)) # prepending same path again is fine, no changes to $MODULEPATH modulepath = curr_module_paths() self.modtool.prepend_module_path(test_path) self.assertEqual(modulepath, curr_module_paths()) # prepending path that is 'deeper down' in $MODULEPATH works, brings it back to front test_mods_dir = os.path.join( os.path.dirname(os.path.abspath(__file__)), 'modules') self.assertTrue( any(os.path.samefile(test_mods_dir, p) for p in modulepath)) self.modtool.prepend_module_path(test_mods_dir) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_mods_dir)) # prepending path that is a symlink to the current head of $MODULEPATH is a no-op modulepath = curr_module_paths() symlink_path = os.path.join(self.test_prefix, 'symlink_modules') os.symlink(modulepath[0], symlink_path) self.modtool.prepend_module_path(symlink_path) self.assertEqual(modulepath, curr_module_paths())
def skip_available(easyconfigs, testing=False): """Skip building easyconfigs for which a module is already available.""" m = modules_tool() easyconfigs, check_easyconfigs = [], easyconfigs for ec in check_easyconfigs: module = ec["module"] mod = "%s (version %s)" % (module[0], module[1]) modspath = mk_module_path(curr_module_paths() + [os.path.join(config.install_path("mod"), "all")]) if m.exists(module[0], module[1], modspath): msg = "%s is already installed (module found in %s), skipping " % (mod, modspath) print_msg(msg, log=_log, silent=testing) _log.info(msg) else: _log.debug("%s is not installed yet, so retaining it" % mod) easyconfigs.append(ec) return easyconfigs
def skip_available(easyconfigs, testing=False): """Skip building easyconfigs for which a module is already available.""" m = modules_tool() easyconfigs, check_easyconfigs = [], easyconfigs for ec in check_easyconfigs: module = ec['module'] mod = "%s (version %s)" % (module[0], module[1]) modspath = mk_module_path(curr_module_paths() + [os.path.join(config.install_path("mod"), 'all')]) if m.exists(module[0], module[1], modspath): msg = "%s is already installed (module found in %s), skipping " % (mod, modspath) print_msg(msg, log=_log, silent=testing) _log.info(msg) else: _log.debug("%s is not installed yet, so retaining it" % mod) easyconfigs.append(ec) return easyconfigs
def test_prepend_module_path(self): """Test prepend_module_path method.""" test_path = tempfile.mkdtemp(prefix=self.test_prefix) self.modtool.prepend_module_path(test_path) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_path)) # prepending same path again is fine, no changes to $MODULEPATH modulepath = curr_module_paths() self.modtool.prepend_module_path(test_path) self.assertEqual(modulepath, curr_module_paths()) # prepending path that is 'deeper down' in $MODULEPATH works, brings it back to front test_mods_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'modules') self.assertTrue(any(os.path.samefile(test_mods_dir, p) for p in modulepath)) self.modtool.prepend_module_path(test_mods_dir) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_mods_dir)) # prepending path that is a symlink to the current head of $MODULEPATH is a no-op modulepath = curr_module_paths() symlink_path = os.path.join(self.test_prefix, 'symlink_modules') os.symlink(modulepath[0], symlink_path) self.modtool.prepend_module_path(symlink_path) self.assertEqual(modulepath, curr_module_paths()) # test prepending with high priority test_path_bis = tempfile.mkdtemp(prefix=self.test_prefix) test_path_tris = tempfile.mkdtemp(prefix=self.test_prefix) self.modtool.prepend_module_path(test_path_bis, priority=10000) self.assertEqual(test_path_bis, curr_module_paths()[0]) # check whether prepend with priority actually works (only for Lmod) if isinstance(self.modtool, Lmod): self.modtool.prepend_module_path(test_path_tris) modulepath = curr_module_paths() self.assertEqual(test_path_bis, modulepath[0]) self.assertEqual(test_path_tris, modulepath[1])
def test_prepend_module_path(self): """Test prepend_module_path method.""" test_path = tempfile.mkdtemp(prefix=self.test_prefix) self.modtool.prepend_module_path(test_path) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_path)) # prepending same path again is fine, no changes to $MODULEPATH modulepath = curr_module_paths() self.modtool.prepend_module_path(test_path) self.assertEqual(modulepath, curr_module_paths()) # prepending path that is 'deeper down' in $MODULEPATH works, brings it back to front test_mods_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'modules') self.assertTrue(any(os.path.samefile(test_mods_dir, p) for p in modulepath)) self.modtool.prepend_module_path(test_mods_dir) self.assertTrue(os.path.samefile(curr_module_paths()[0], test_mods_dir)) # prepending path that is a symlink to the current head of $MODULEPATH is a no-op modulepath = curr_module_paths() symlink_path = os.path.join(self.test_prefix, 'symlink_modules') os.symlink(modulepath[0], symlink_path) self.modtool.prepend_module_path(symlink_path) self.assertEqual(modulepath, curr_module_paths())
validate=validate_easyconfigs)) except IOError, err: log.error("Processing easyconfigs in path %s failed: %s" % (path, err)) # before building starts, take snapshot of environment (watch out -t option!) origEnviron = copy.deepcopy(os.environ) os.chdir(os.environ['PWD']) # skip modules that are already installed unless forced if not options.force: m = Modules() easyconfigs, check_easyconfigs = [], easyconfigs for ec in check_easyconfigs: module = ec['module'] mod = "%s (version %s)" % (module[0], module[1]) modspath = mk_module_path(curr_module_paths() + [os.path.join(config.install_path("mod"), 'all')]) if m.exists(module[0], module[1], modspath): msg = "%s is already installed (module found in %s), skipping " % (mod, modspath) print_msg(msg, log, silent=testing) log.info(msg) else: log.debug("%s is not installed yet, so retaining it" % mod) easyconfigs.append(ec) # determine an order that will allow all specs in the set to build if len(easyconfigs) > 0: print_msg("resolving dependencies ...", log, silent=testing) # force all dependencies to be retained and validation to be skipped for building dep graph force = retain_all_deps and not validate_easyconfigs orderedSpecs = resolve_dependencies(easyconfigs, options.robot, force=force) else: