[Modules] New feature: module refresh (now against CVS)
Manage your shell environment variables and aliases
Brought to you by:
xdelaruelle
From: Andrew R. <ae...@ab...> - 2005-08-11 21:51:26
|
Hey all, I've rebased the module refresh patch against current CVS (as of 4:30 p.m.) and it seems to work alright. This patch is against all my other patches I have sent in the last few months, but I have also attached a full patch that includes all the changes and applies cleanly against the current CVS. Cheers, Andrew Ruder P.S. See the bottom of the email for the original description of the refresh command. modules_refresh_cvs.patch: ChangeLog | 4 Makefile.am | 2 ModuleCmd_Refresh.c | 214 +++++++++++++++++++++++++++ cmdConflict.c | 17 ++ cmdInfo.c | 7 cmdModule.c | 16 ++ cmdPath.c | 17 ++ cmdSetenv.c | 15 + cmdTrace.c | 18 ++ cmdUlvl.c | 9 + doc/module.1.in | 6 main.c | 4 modules_def.h | 2 13 files changed, 324 insertions(+), 7 deletions(-) everything_cvs.patch ChangeLog | 63 + Makefile.am | 2 ModuleCmd_Refresh.c | 214 +++++ cmdConflict.c | 21 cmdInfo.c | 7 cmdModule.c | 16 cmdPath.c | 17 cmdSetenv.c | 15 cmdTrace.c | 18 cmdUlvl.c | 9 config/ax_create_stdint_h.m4 | 685 ++++++++++++++++++ doc/module.1.in | 6 lib/avec.h | 4 lib/avec/avec_.c | 1 lib/avec/avec_init.c | 1 lib/avec/avec_set_fns.c | 37 lib/configure.ac | 4 lib/gen-libmodulesconfig | 7 lib/list.h | 4 lib/list/list_ctor.c | 1 lib/list/list_sizeof.c | 1 lib/uvec.h | 8 lib/uvec/uvec_alloc.c | 2 lib/uvec/uvec_copy_str.c | 5 locate_module.c | 58 - main.c | 4 modules_def.h | 2 27 files changed, 1127 insertions(+), 85 deletions(-) == Original email with description of module refresh == Hey all, Attached are patches against Modules 3.1.6 that implement a 'refresh' subcommand. I am also throwing on a outstanding patch that fixes a malloc issue in cmdConflict.c that causes segfaults (more so on some architectures than others). This subcommand is very simple: it reloads only the non-persistent attributes of the currently loaded modules, regardless of the state of the loaded modules. (i.e. refresh aliases) The problem is that aliases do not persist across shells like environment variables. So if modules is initialized only on the login shell and one of the loaded modules sets up an alias 'cc' to be 'gcc -O3', when 'bash' or some other shell is ran (non-login), the alias will be lost. Example: aer@myhost:~> alias alias cc='gcc -O3' aer@myhost:~> bash aer@myhost:~> alias aer@myhost:~> aer@myhost:~> module refresh aer@myhost:~> alias alias cc='gcc -O3' aer@myhost:~> What is the point? modules can now be initialized only in the login shell. On non-login shells (or at any other time that you can determine that the modules environment is already loaded), a 'module refresh' can be issued to refresh the environment. 'module update' nearly does the same thing, but with one difference: module update clears the environment and reinitializes it to .modulesbeginenv and then reloads all the modules. This has two problems: * If the loaded modules are in an inconsistent state, errors arise. (For example, the switch subcommand very easily allows conflicting modules to be loaded at the same time). * It clears out any changes by the user to the environment. Since the environment is likely persistent across the shells, only the aliases need to be reinitialized. The new subcommand is heavily based on ModuleCmd_Display.c and ModuleCmd_Update.c. To apply: aer@myhost ~/modules-3.1.6 $ patch -p1 < ~/fix_prereq.patch patching file cmdConflict.c aer@myhost ~/modules-3.1.6 $ patch -p1 < ~/add_module_refresh.patch patching file Makefile.in patching file ModuleCmd_Help.c patching file ModuleCmd_Refresh.c patching file cmdConflict.c patching file cmdInfo.c patching file cmdModule.c patching file cmdPath.c patching file cmdSetenv.c patching file cmdTrace.c patching file cmdUlvl.c patching file main.c patching file modules_def.h aer@myhost ~/modules-3.1.6 $ Feedback would be much appreciated, and I would be willing to do any extra work required to make sure this is available in a 3.1.7 release. Thanks and enjoy, Andrew Ruder |