Skip to content

Commit

Permalink
Added support for modes on setenv etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
mrcawood committed Oct 16, 2024
1 parent f0d27ce commit a1d7772
Show file tree
Hide file tree
Showing 9 changed files with 192 additions and 46 deletions.
13 changes: 11 additions & 2 deletions rt/unload/err.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
step 1
lua ProjectDIR/src/lmod.in.lua shell --regression_testing --version
===========================
Modules based on Lua: Version 8.7.40 2024-06-11 15:18 -06:00
Modules based on Lua: Version 8.7.43 2024-06-24 15:50 -06:00
by Robert McLay [email protected]
===========================
step 2
lua ProjectDIR/src/lmod.in.lua shell --regression_testing spider
===========================
The following is a list of the modules and extensions currently available:
B: B/2.0
C: C/1.0
gcc: gcc/4.7.2
intel: intel/13.0
mpich2: mpich2/1.5.2
Expand Down Expand Up @@ -37,7 +38,7 @@ ProjectDIR/rt/unload/mf/MPI/intel/13.0/mpich2/1.5
ProjectDIR/rt/unload/mf/Compiler/intel/13.0
mpich2/1.5.2 (L)
ProjectDIR/rt/unload/mf/Core
B/2.0 gcc/4.7.2 intel/13.0 (L)
B/2.0 C/1.0 gcc/4.7.2 intel/13.0 (L)
Where:
L: Module is loaded
If the avail list is too long consider trying:
Expand Down Expand Up @@ -69,3 +70,11 @@ Lmod Warning: Error in unload of B/2.0
While processing the following module(s):
Module fullname Module Filename
B/2.0 ProjectDIR/rt/unload/mf/Core/B/2.0.lua
===========================
step 10
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load C
===========================
===========================
step 11
lua ProjectDIR/src/lmod.in.lua shell --regression_testing unload C
===========================
3 changes: 3 additions & 0 deletions rt/unload/mf/Core/C/1.0.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
setenv{"A", "A", mode={"load"}}
setenv{"A", "B", mode={"unload"}}
setenv{"AA", "X", mode={"load", "unload"}}
30 changes: 30 additions & 0 deletions rt/unload/out.txt
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,33 @@ unset TOTO;
unset _LMFILES_;
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={mpich2={fn="ProjectDIR/rt/unload/mf/Compiler/intel/13.0/mpich2/1.5.2.lua",fullName="mpich2/1.5.2",loadOrder=-1,propT={},stackDepth=0,status="inactive",userName="mpich2",wV="000000001.000000005.000000002.*zfinal",},petsc={fn="ProjectDIR/rt/unload/mf/MPI/intel/13.0/mpich2/1.5/petsc/3.2.lua",fullName="petsc/3.2",loadOrder=-2,propT={},stackDepth=0,status="inactive",userName="petsc",wV="000000003.000000002.*zfinal",},},mpathA={"ProjectDIR/rt/unload/mf/Core",},systemBaseMPATH="ProjectDIR/rt/unload/mf/Core",}';
export _ModuleTable_;
===========================
step 10
lua ProjectDIR/src/lmod.in.lua shell --regression_testing load C
===========================
A=A;
export A;
AA=X;
export AA;
LOADEDMODULES=C/1.0;
export LOADEDMODULES;
MODULEPATH=ProjectDIR/rt/unload/mf/Core;
export MODULEPATH;
_LMFILES_=ProjectDIR/rt/unload/mf/Core/C/1.0.lua;
export _LMFILES_;
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={C={fn="ProjectDIR/rt/unload/mf/Core/C/1.0.lua",fullName="C/1.0",loadOrder=1,propT={},stackDepth=0,status="active",userName="C",wV="000000001.*zfinal",},mpich2={fn="ProjectDIR/rt/unload/mf/Compiler/intel/13.0/mpich2/1.5.2.lua",fullName="mpich2/1.5.2",loadOrder=-1,propT={},stackDepth=0,status="inactive",userName="mpich2",wV="000000001.000000005.000000002.*zfinal",},petsc={fn="ProjectDIR/rt/unload/mf/MPI/intel/13.0/mpich2/1.5/petsc/3.2.lua",fullName="petsc/3.2",loadOrder=-2,propT={},stackDepth=0,status="inactive",userName="petsc",wV="000000003.000000002.*zfinal",},},mpathA={"ProjectDIR/rt/unload/mf/Core",},systemBaseMPATH="ProjectDIR/rt/unload/mf/Core",}';
export _ModuleTable_;
===========================
step 11
lua ProjectDIR/src/lmod.in.lua shell --regression_testing unload C
===========================
A=B;
export A;
AA=X;
export AA;
unset LOADEDMODULES;
MODULEPATH=ProjectDIR/rt/unload/mf/Core;
export MODULEPATH;
unset _LMFILES_;
_ModuleTable_='_ModuleTable_={MTversion=3,depthT={},family={},mT={mpich2={fn="ProjectDIR/rt/unload/mf/Compiler/intel/13.0/mpich2/1.5.2.lua",fullName="mpich2/1.5.2",loadOrder=-1,propT={},stackDepth=0,status="inactive",userName="mpich2",wV="000000001.000000005.000000002.*zfinal",},petsc={fn="ProjectDIR/rt/unload/mf/MPI/intel/13.0/mpich2/1.5/petsc/3.2.lua",fullName="petsc/3.2",loadOrder=-2,propT={},stackDepth=0,status="inactive",userName="petsc",wV="000000003.000000002.*zfinal",},},mpathA={"ProjectDIR/rt/unload/mf/Core",},systemBaseMPATH="ProjectDIR/rt/unload/mf/Core",}';
export _ModuleTable_;
2 changes: 2 additions & 0 deletions rt/unload/unload.tdesc
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ testdescript = {
runLmod unload intel # 7
runLmod load B # 8
runLmod unload B # 9
runLmod load C # 10
runLmod unload C # 11
HOME=$ORIG_HOME
Expand Down
22 changes: 13 additions & 9 deletions src/MC_Show.lua
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ local function l_ShowCmd(name,...)
A[#A+1] = ShowCmdStr(name, ...)
end

local function l_ShowCmdT(funcName, table)
A[#A+1] = ShowCmdT(funcName, table)
end

local function l_Show_help(...)
A[#A+1] = ShowHelpStr(...)
end
Expand Down Expand Up @@ -174,9 +178,9 @@ end
-- @param self A MainControl object.
-- @param name the environment variable name.
-- @param value the environment variable value.
function M.pushenv(self, name,value)
setenv_posix(name, value, true)
l_ShowCmd("pushenv", name, value)
function M.pushenv(self, table)
setenv_posix(table[1], table[2], true)
l_ShowCmdT("pushenv", table)
end

--------------------------------------------------------------------------
Expand All @@ -200,19 +204,19 @@ end
-- @param self A MainControl object.
-- @param name the environment variable name.
-- @param value the environment variable value.
function M.setenv(self, name,value)
setenv_posix(name, value, true)
l_ShowCmd("setenv", name, value)
function M.setenv(self, table) --name,value)
setenv_posix(table[1], table[2], true)
l_ShowCmdT("setenv", table)
end

--------------------------------------------------------------------------
-- Print unsetenv command.
-- @param self A MainControl object.
-- @param name the environment variable name.
-- @param value the environment variable value.
function M.unsetenv(self, name,value)
setenv_posix(name, nil, true)
l_ShowCmd("unsetenv", name, value)
function M.unsetenv(self, table)
setenv_posix(table[1], nil, true)
l_ShowCmdT("unsetenv", table)
end

--------------------------------------------------------------------------
Expand Down
8 changes: 4 additions & 4 deletions src/MT.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1109,8 +1109,8 @@ function M.setfamily(self,familyNm,mName)
local familyA = l_buildFamilyPrefix()
for i = 1,#familyA do
local n = familyA[i] .. familyNm:upper()
MCP:setenv(n, mName)
MCP:setenv(n .. "_VERSION", myModuleVersion())
MCP:setenv{n, mName}
MCP:setenv{n .. "_VERSION", myModuleVersion()}
end
return results
end
Expand All @@ -1123,8 +1123,8 @@ function M.unsetfamily(self,familyNm)
local familyA = l_buildFamilyPrefix()
for i = 1,#familyA do
local n = familyA[i] .. familyNm:upper()
MCP:unsetenv(n, "")
MCP:unsetenv(n .. "_VERSION", "")
MCP:unsetenv{n, ""}
MCP:unsetenv{n .. "_VERSION", ""}
end
self.family[familyNm] = nil
end
Expand Down
30 changes: 20 additions & 10 deletions src/MainControl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -312,8 +312,10 @@ end
-- @param name the environment variable name.
-- @param value the environment variable value.
-- @param respect If true, then respect the old value.
function M.setenv(self, name, value, respect)
name = name:trim()
function M.setenv(self, table) --name, value, respect)
local name = (table[1] or ""):trim()
local value = table[2]
local respect = table[3] or nil
dbg.start{"MainControl:setenv(\"",name,"\", \"",value,"\", \"",
respect,"\")"}

Expand Down Expand Up @@ -342,8 +344,10 @@ end
-------------------------------------------------------------------
-- Set an environment variable.
-- This function just sets the name with value in the current env.
function M.setenv_env(self, name, value, respect)
name = (name or ""):trim()
function M.setenv_env(self, table) --name, value, respect)
local name = (table[1] or ""):trim()
local value = table[2]
local respect = table[3] or nil
dbg.start{"MainControl:setenv_env(\"",name,"\", \"",value,"\", \"",
respect,"\")"}
posix.setenv(name, value, true)
Expand All @@ -357,8 +361,12 @@ end
-- @param name the environment variable name.
-- @param value the environment variable value.
-- @param respect If true, then respect the old value.
function M.unsetenv(self, name, value, respect)
name = (name or ""):trim()
function M.unsetenv(self, table) --name, value, respect)

local name = (table[1] or ""):trim()
local value = table[2]
local respect = table[3] or nil

dbg.start{"MainControl:unsetenv(\"",name,"\", \"",value,"\")"}

l_check_for_valid_name("unsetenv",name)
Expand Down Expand Up @@ -393,8 +401,9 @@ end
-- @param self A MainControl object.
-- @param name the environment variable name.
-- @param value the environment variable value.
function M.pushenv(self, name, value)
name = name:trim()
function M.pushenv(self, table) --name, value)
local name = table[1]:trim()
local value = table[2]
dbg.start{"MainControl:pushenv(\"",name,"\", \"",value,"\")"}

l_check_for_valid_name("pushenv",name)
Expand Down Expand Up @@ -449,8 +458,9 @@ end
-- @param self A MainControl object.
-- @param name the environment variable name.
-- @param value the environment variable value.
function M.popenv(self, name, value)
name = name:trim()
function M.popenv(self, table) --name, value)
local name = (table[1] or ""):trim()
local value = table[2]
dbg.start{"MainControl:popenv(\"",name,"\", \"",value,"\")"}

l_check_for_valid_name("popenv",name)
Expand Down
79 changes: 58 additions & 21 deletions src/modfuncs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -139,18 +139,18 @@ end
--------------------------------------------------------------------------
-- Validate a function with only string module names table.
-- @param cmdName The command which is getting its arguments validated.
local function l_validateArgsWithValue(cmdName, ...)
local argA = pack(...)
local function l_validateArgsWithValue(cmdName, table)

for i = 1, argA.n -1 do
local v = argA[i]
local n = table.n or #table
for i = 1, n -1 do
local v = table[i]
if (type(v) ~= "string") then
mcp:report{msg="e_Args_Not_Strings", fn = myFileName(), cmdName = cmdName}
return false
end
end

local v = argA[argA.n]
local v = table[n]
if (type(v) ~= "string" and type(v) ~= "number" and type(v) ~= "boolean") then
mcp:report{msg="e_Args_Not_Strings", fn = myFileName(), cmdName = cmdName}
return false
Expand Down Expand Up @@ -291,46 +291,74 @@ end
-- Set the value of environment variable and maintain a stack.
function pushenv(...)
dbg.start{"pushenv(",l_concatTbl({...},", "),")"}
if (not l_validateArgsWithValue("pushenv",...)) then return end

mcp:pushenv(...)
local table
local mcp_old = mcp
mcp, table = list_2_Tbl(MCP, mcp, ...)
if ( not mcp ) then
mcp = mcp_old
return
end

if (not l_validateArgsWithValue("pushenv",table)) then return end

mcp:pushenv(table)
mcp = mcp_old
dbg.fini("pushenv")
return
end

--------------------------------------------------------------------------
-- Convert all function arguments to table form
-- first_elem seperated from args for type test
function list_2_Tbl(first_elem, ...)
function list_2_Tbl(MCP, mcp, first_elem, ...)
dbg.start{"list_2_Tbl(",l_concatTbl({first_elem, ...},", "),")"}

local my_mcp = nil
local t = nil
local action = nil
if ( type(first_elem) == "table" )then
t = first_elem
t.kind = "table"
local my_mode = mode()
local modeA = t.mode or {}
for i = 1,#modeA do
if (my_mode == modeA[i]) then
action = true
my_mcp = MCP
break
end
end

else
t = pack(first_elem, ...)
t.kind = "list"
my_mcp = mcp
action = true
end
dbg.print{"OutputTable: ", l_concatTbl(t, ", "), "\n"}

if ( not action ) then my_mcp = nil end
dbg.print{"OutputTable: ", t, "\n"}
dbg.fini("list_2_Tbl")
return t
return my_mcp, t
end

--------------------------------------------------------------------------
-- Set the value of environment variable.
function setenv(...)
dbg.start{"setenv(",l_concatTbl({...},", "),")"}

if (not l_validateArgsWithValue("setenv",...)) then return end

--local mcp_old = mcp
local table = list_2_Tbl(...)

--mcp = mcp_old
--dbg.print{"Setting mcp to ", mcp:name(),"\n"}

mcp:setenv(...)
local table
local mcp_old = mcp
mcp, table = list_2_Tbl(MCP, mcp, ...)
if ( not mcp ) then
mcp = mcp_old
return
end

if (not l_validateArgsWithValue("setenv", table)) then return end
mcp:setenv(table)
mcp = mcp_old
dbg.fini("setenv")
return
end
Expand All @@ -339,9 +367,18 @@ end
-- Unset the value of environment variable.
function unsetenv(...)
dbg.start{"unsetenv(",l_concatTbl({...},", "),")"}
if (not l_validateArgsWithValue("unsetenv",...)) then return end

mcp:unsetenv(...)
local table
local mcp_old = mcp
mcp, table = list_2_Tbl(MCP, mcp, ...)
if ( not mcp ) then
mcp = mcp_old
return
end

if (not l_validateArgsWithValue("unsetenv", table)) then return end
mcp:unsetenv(table)
mcp = mcp_old
dbg.fini("unsetenv")
return
end
Expand Down
Loading

0 comments on commit a1d7772

Please sign in to comment.