SVN (Subversion) Update
Posted September 5th, 2009 by RGerkin
Run an SVN update of code from Igor on Windows using TortoiseSVN. This is complicated by the fact that Independent modules are not handled gracefully and that closing procedure windows while procedures are running can confuse Igor if not done correctly.
Function SVNUpdate() DoAlert 1,"Close all procedure files, update, and reload them? Unsaved changes to procedure files will be lost." Variable i if(V_flag==1) String cmdList=CloseAllProcs(exec=0); // Generate a list of procedure closing commands. For some reason directly executing CloseAllProcs(exec=1) in the execute queue doesn't work correctly. for(i=0;i<ItemsInList(cmdList);i+=1) String cmd=StringFromList(i,cmdList) Execute /Q/P cmd // Execute each procedure closing. endfor cmd="TortoiseProc /command:update /path:" String codePath="C:Documents and Settings:rick:Application Data:Wavemetrics:Igor Pro 6:Packages:Code" NewPath /O/Q CodePath, codePath Execute /Q/P "ExecuteScriptText /B/Z \""+cmd+"\\\""+codePath+"\\\"\"" // Run the SVN update. Extra slashes needed to escape the quotes in the command. Execute /Q/P "OpenProc /P=CodePath /V=1 \"Master.ipf\"" // Assume that master.ipf will #include the other procedure files. Execute /Q/P "Silent 101" // Recompile. endif End Function /S CloseAllProcs([except,exec]) String except Variable exec if(ParamIsDefault(except)) except="" endif exec=ParamIsDefault(exec) ? 1 : exec Execute /Q "SetIgorOption IndependentModuleDev=1" String currProcs=WinList("*",";","WIN:128,INDEPENDENTMODULE:1") Variable i=0 String cmdList="" for(i=0;i<ItemsInList(currProcs);i+=1) String procName=StringFromList(i,currProcs) Variable pos=strsearch(procName,"[",0) if(pos>=0) // If this has an independent module name. procName=procName[0,pos-2]// Truncate it to be compatible with CloseProc. endif if(WhichListItem(except,procName)>=0) continue // Do not close procedures on the except list. endif if(StringMatch(procName,"Procedure")) continue // Do not close experiment procedure file. endif String cmd sprintf cmd, "CloseProc /NAME=\"%s\"",procName if(exec) Execute /Q/P cmd endif cmdList+=cmd+";" endfor Execute /Q "SetIgorOption independentModuleDev=0" if(exec) Execute /Q/P "Silent 101" endif return cmdList End
