Compile function SRP_Git_Services(@Service, @Params) /************************************************************************************************ This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written permission from SRP Computer Solutions, Inc. Name : SRP_GIT_SERVICES Test Description : Service module for the SRP GIT system. Parameters: Service [IN] - The service to execute Params [IN] - Service specific parameters History (Date, Initials, Notes) 02/25/19 DJS Original programmer 07/29/19 KRF Ported from Git_Services 03/04/24 KRF Fixed bug in PullEntities where For Loop iterator was getting reset by gosubs ************************************************************************************************/ #pragma precomp SRP_PreCompiler Common /SRP_Git_Services/ SRPGitServices_UserSettings@ Common /SRP_Git_Listener/ SRPGitListener_Suppress@ $insert LOGICAL $insert MESSAGE_BOX_EQUATES $insert RLIST_EQUATES Equ CRLF$ to \0D0A\ Equ SrpGitEnabled$ To 1 Equ SrpGitRepoLoc$ To 2 Equ SrpGitExePath$ To 3 Equ SrpGitGUICommand$ To 4 Equ SrpGitCommitCommand$ To 5 Equ SrpGitPullCommand$ To 6 Equ SrpGitPushCommand$ To 7 Equ SrpGitHistCommand$ To 8 Equ SrpGitDiffCommand$ To 9 Equ SrpGitWarning$ To 10 Declare function SRP_Git_Services, SRP_Git_Serializer, Get_Repos_Entities, Repository, SRP_Editor_Parse, SRP_RevErrorMsg, SRP_Array, Min, DateTime Declare subroutine SRP_Git_Serializer, Utility, Get_Status, Set_Status, Repository, Msg, Set_Property, Send_Message, Yield, SRP_Git_Services // load the settings on the first call If Len(SRPGitServices_UserSettings@) else SRPGitServices_UserSettings@ = Xlate("SYSENV", "SRP_GIT_SETTINGS", "", "X") If Len(SRPGitServices_UserSettings@) else SRPGitServices_UserSettings@ = Xlate("SYSENV", "SRP_GIT_SETTINGS*":@APPID<1>:"*":@Username, "", "X") end end GoToService Return Response or "" //----------------------------------------------------------------------------- // SERVICES //----------------------------------------------------------------------------- Service HasSettings() Response = Len(SRPGitServices_UserSettings@) GT 0 AND Len(SRPGitServices_UserSettings@) GT 0 end service Service IsEnabled() Response = If Len(SRPGitServices_UserSettings@) then SRPGitServices_UserSettings@ else 0 end service Service GetRepoPath() Response = SRPGitServices_UserSettings@ end service Service GetGitPath() Response = SRPGitServices_UserSettings@ end service Service GetGuiCommand() Response = SRPGitServices_UserSettings@ end service Service GetCommitCommand() Response = SRPGitServices_UserSettings@ end service Service GetPullCommand() Response = SRPGitServices_UserSettings@ end service Service GetPushCommand() Response = SRPGitServices_UserSettings@ end service Service GetHistCommand() Response = SRPGitServices_UserSettings@ end service Service GetDiffCommand() Response = SRPGitServices_UserSettings@ end service Service GetWarning() Response = SRPGitServices_UserSettings@ end service Service GetCurrentCommit() If Len(SRPGitServices_UserSettings@) then Root = SRPGitServices_UserSettings@:' -C "':SRPGitServices_UserSettings@:'"' Cmd = Root:" for-each-ref --count=1 --sort=-committerdate refs/heads --format=%(HEAD)":\0D\:"%(objectname:short=8)":\0D\:"%(refname:short)":\0D\:"%(committerdate:relative)":\0D\:"%(authorname)":\0D\:"%(subject)":\0D\:"[%(refname:short)]":\0B\:"%(subject)":\0B\:"(%(authorname))" Output = "VAR" Call SRP_Run_Command(Cmd, Output) Convert \0D0B\ to @FM:" " in Output Response = Field(Output, @FM, 1, 7) end end service Service GetBranchHeads() If Len(SRPGitServices_UserSettings@) then Root = SRPGitServices_UserSettings@:' -C "':SRPGitServices_UserSettings@:'"' Cmd = Root:" for-each-ref --sort=-committerdate refs/heads --format=%(HEAD)":\0D\:"%(objectname:short=8)":\0D\:"%(refname:short)":\0D\:"%(committerdate:relative)":\0D\:"%(authorname)":\0D\:"%(subject)":\0D\:"[%(refname:short)]":\0B\:"%(subject)":\0B\:"(%(authorname))" Response = "VAR" Call SRP_Run_Command(Cmd, Response) Convert \0A0D0B\ to @FM:@VM:" " in Response If Response[-1, 1] EQ @FM then Response[-1, 1] = "" end end service Service GetCommits() If Len(SRPGitServices_UserSettings@) then Root = SRPGitServices_UserSettings@:' -C "':SRPGitServices_UserSettings@:'"' Cmd = Root:" for-each-ref --sort=-committerdate refs --format=%(HEAD)":\0D\:"%(objectname:short=8)":\0D\:"%(refname:short)":\0D\:"%(committerdate:relative)":\0D\:"%(authorname)":\0D\:"%(subject)":\0D\:"[%(refname:short)]":\0B\:"%(subject)":\0B\:"(%(authorname))" Response = "VAR" Call SRP_Run_Command(Cmd, Response) Convert \0A0D0B\ to @FM:@VM:" " in Response If Response[-1, 1] EQ @FM then Response[-1, 1] = "" end end service Service LoadLastCommit() Response = Xlate("SYSENV", "SRP_GIT_LASTCOMMIT", "", "X") end service Service SaveLastCommit(CommitId, CommitDesc, CommitBranch, CommitAuthor) Open "SYSENV" to hSYSENV then Rec = "" Rec<-1> = CommitId Rec<-1> = CommitDesc Rec<-1> = CommitBranch Rec<-1> = CommitAuthor Write Rec to hSYSENV, "SRP_GIT_LASTCOMMIT" then NULL end end service Service GetFileChanges(StartCommit, EndCommit) Equ StatusName$ to "Added,Deleted,Modified" Response = "" ExePath = SRPGitServices_UserSettings@ RepoPath = SRPGitServices_UserSettings@ If Len(ExePath) then Cmd = ExePath:' -C "':RepoPath:'" diff --name-status --no-renames --diff-filter=crtuxb ':StartCommit:' ':EndCommit Output = "VAR" Call SRP_Run_Command(Cmd, Output) If RepoPath[-1, 1] NE '\' then RepoPath := '\' For Each Line in Output using \0A\ Status = Line[1, \09\] File = Line[Col2() + 1, \09\] If IndexC(File, ".gitignore", 1) EQ 0 then Pos = Index("ADM", Status[1, 1], 1) If Pos GT 0 then Status = Field(StatusName$, ",", Pos, 1) else Status = "Unknown" EntId = SRP_Git_Serializer("PathToEntityId", RepoPath, RepoPath:File) Response<-1> = Status:@VM:EntId end Next Line end end service Service SaveUserSettings(GitEnabled, GitRepoLoc, GitExePath, GitGUICommand, GitWarning, GitCommitCommand, GitPullCommand, GitPushCommand, GitHistCommand, GitDiffCommand) // Update the settings SRPGitServices_UserSettings@ = GitEnabled SRPGitServices_UserSettings@ = GitRepoLoc SRPGitServices_UserSettings@ = GitExePath SRPGitServices_UserSettings@ = GitGUICommand SRPGitServices_UserSettings@ = GitWarning SRPGitServices_UserSettings@ = GitCommitCommand SRPGitServices_UserSettings@ = GitPullCommand SRPGitServices_UserSettings@ = GitPushCommand SRPGitServices_UserSettings@ = GitHistCommand SRPGitServices_UserSettings@ = GitDiffCommand // Write the settings to disk Open 'SYSENV' to hSYSENV then Write SRPGitServices_UserSettings@ on hSYSENV, "SRP_GIT_SETTINGS" else Response = "Failed to save user Git settings. OpenInsight error code: ":Status() end end // Update the MD table base on whether or not things are enabled Open "MD" to hMD then If GitEnabled then Read Rec from hMD, "REPOSITORY" else Rec = 'P':@FM:@FM:@FM:@FM:'SYSOBJ':@FM:'SRP_GIT_LISTENER' Write Rec to hMD, "REPOSITORY" then null end end else Delete hMD, "REPOSITORY" then null end GarbageCollect Flush Call Set_Property("SYSTEM", "IDLEPROC", "RTP27":@FM:"REPOSITORY") end end service Options ENTITY_TYPES = "ALL", "OIWIN", "STPROC", "STPROCINS" Service GetSupportedEntityTypes() Response = SRP_Git_Serializer("GetSupportedEntityTypes") end service Service GetOIEntities(EntityTypes=ENTITY_TYPES, Apps) Response = "" If EntityTypes EQ "" OR EntityTypes EQ "ALL" then EntityTypes = SRP_Git_Services("GetSupportedEntityTypes") If Apps EQ "" then Apps = @APPID For each EntityType in EntityTypes using @FM For each App in Apps EntList = Get_Repos_Entities(App, EntityType, '') If Len(EntList) then For each EntID in EntList using @FM Parts = EntID Convert '*' to @VM in Parts Response := EntID:@VM:Parts:@FM ; *:@VM:LastChanged:@FM Next EntID end Next App Next EntityType Response[-1, 1] = "" end service Service GetRepoEntities(EntityTypes=ENTITY_TYPES, Apps, CommitStart, CommitEnd) // get the repo path RepoPath = SRPGitServices_UserSettings@ If RepoPath[-1, 1] NE '\' then RepoPath := '\' Response = "" If EntityTypes EQ "" OR EntityTypes EQ "ALL" then EntityTypes = SRP_Git_Services("GetSupportedEntityTypes") If Apps EQ "" then Apps = @APPID If Len(CommitStart) AND Len(CommitEnd) then FileChanges = SRP_Git_Services("GetFileChanges", CommitStart, CommitEnd) For Each FileChange in FileChanges Status = FileChange<1, 1> EntId = FileChange<1, 2> Parts = EntId Convert '*' to @VM in Parts Locate Parts<1, 1> in Apps using @FM setting AppPos then Locate Parts<1, 2> in EntityTypes using @FM setting TypePos then Response := EntId:@VM:Parts:@VM:Status:@FM end end Next FileChange end else For each EntityType in EntityTypes using @FM For each App in Apps ErrCode = '' Type = EntityType[1, '*'] Class = EntityType[Col2() + 1, '*'] WinDir = If Len(Class) then RepoPath:App:'\':Type:'\':Class else RepoPath:App:'\':Type Call SetInitDirOptions("D") InitDir WinDir:'\*.*' DirList = DirList() NumDirs = DCount(DirList, @FM) For iDir = 1 to NumDirs Dir = DirList If Dir NE ".." then CurrPath = If Dir EQ "." then WinDir else WinDir:"\":Dir InitDir CurrPath:'\*.*' FileList = DirList() If Len(FileList) then For each Filename in FileList using @FM setting fPos EntID = SRP_Git_Serializer("PathToEntityId", RepoPath, CurrPath:'\':Filename) Parts = EntID Convert '*' to @VM in Parts Response := EntID:@VM:Parts:@FM Next Filename end end Next iDir Next App Next EntityType end Response[-1, 1] = "" return Service PushEntities(EntityList, StatusCtrl) OSWrite "" to "SRPGitLog.txt" LogPos = 0 SRPGitListener_Suppress@ = 1 RepoPath = SRPGitServices_UserSettings@ NumEntities = DCount(EntityList, @FM) SRP_Git_Services("SendStatus", StatusCtrl, "Pushing ":NumEntities:" entities.\n", "", LogPos) For i = 1 to NumEntities EntityId = EntityList SRP_Git_Services("SendStatus", StatusCtrl, EntityId, "", LogPos) If Field(EntityId, "*", 2, 1) EQ "APPROW" then Name = EntityId[-1, "B*"] Table = Name[1, ":"] Open Table to hTable then Key = Xlate("SYSREPOS", EntityId, 4, "X") If Len(Key) else Key = Name[Col2() + 1, Len(Name)] Read Record from hTable, Key then SRP_Git_Services("SendStatus", StatusCtrl, " -- Pushed\n", "", LogPos) SRP_Git_Serializer("WriteSync", EntityId, Record, RepoPath, Key) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Push Failed\n Unable to read SYSREPOS, ":Key:".\n", "", LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Push Failed\n Unable to open SYSREPOS.\n", "", LogPos) end end else Set_Status(0) Record = Repository("ACCESS", EntityId) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Push Failed\n", ErrCode, LogPos) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Pushed\n", "", LogPos) SRP_Git_Serializer("WriteSync", EntityId, Record, RepoPath) end end Next i SRPGitListener_Suppress@ = "" end service Service PullEntities(EntityList, StatusList, StatusCtrl, CommitId) OSWrite "" to "SRPGitLog.txt" LogPos = 0 SRPGitListener_Suppress@ = 1 ExePath = SRPGitServices_UserSettings@ RepoPath = SRPGitServices_UserSettings@ EntitiesToCompile = '' NumEntities = DCount(EntityList, @FM) SRP_Git_Services("SendStatus", StatusCtrl, "Pulling ":NumEntities:" entities.\n", "", LogPos) For iEntityToPull = 1 to NumEntities EntityId = EntityList Status = StatusList App = EntityId[1, "*"] Type = EntityId[Col2() + 1, "*"] Class = EntityId[Col2() + 1, "*"] Name = EntityId[Col2() + 1, "*"] SRP_Git_Services("SendStatus", StatusCtrl, EntityId, "", LogPos) If Status _EQC "Deleted" then If Type EQ "APPROW" then Table = Name[1, ":"] Key = Xlate("SYSREPOS", EntityId, 4, "X") If Len(Key) else Key = Name[Col2() + 1, Len(Name)] Open Table to hTable then Lock hTable, Key then Unlock hTable, Key Delete hTable, Key then Open "SYSREPOS" to hTable then Delete hTable, EntityID then null end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Delete Failed\n", Status(), LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Delete Failed\n", Status(), LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Delete Failed\n Locked or Doesn't Exist!\n", "", LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Delete Failed\n", Status(), LogPos) end end else If App EQ @APPID<1> then Set_Status(0) Repository("DESTROY", EntityId) end else GoSub DeleteInherited end SRP_Git_Services("SendStatus", StatusCtrl, " -- Deleted\n", "", LogPos) end end else // Get the file from git Path = SRP_Git_Serializer("EntityIdToRelativePath", EntityId) Convert "\" to "/" in Path Cmd = ExePath:' -C "':RepoPath:'" show ':CommitId:':':Path FileData = "VAR" Call SRP_Run_Command(Cmd, FileData) // If it didn't work, just read it if possible ErrCode = 0 If FileData[1, 7] EQ "fatal: " then Convert "/" to "\" in Path OSRead FileData from RepoPath:"\":Path else ErrCode = Status() end end If ErrCode EQ 0 then Metadata = "" Record = SRP_Git_Serializer("Deserialize", EntityId, FileData, Metadata) If Len(Record) else Record = " " If Type EQ "APPROW" then Table = Name[1, ":"] If Metadata NE '' then Key = Metadata end else Key = Name[Col2() + 1, Len(Name)] end Open Table to hTable then Write Record to hTable, Key then Open "SYSREPOS" to hSYSREPOS then Read RepoRec from hSYSREPOS, EntityId else RepoRec = App RepoRec<2> = "$PUBLIC" RepoRec<3> = "$PUBLIC" RepoRec<4> = Key RepoRec<18> = "0" RepoRec<20> = "0" RepoRec<21> = "1" RepoRec<22> = "0" RepoRec<23> = "0" RepoRec<26> = App RepoRec<27> = Key end RepoRec<25> = DateTime() Write RepoRec to hSYSREPOS, EntityId then SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", Status(), LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", Status(), LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", Status(), LogPos) end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", Status(), LogPos) end end else If App EQ @APPID<1> then Set_Status(0) Repository("LOCK", EntityId) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n Locked!\n", "", LogPos) end else Set_Status(0) Repository("WRITE", EntityId, "", 1, 1, "", "", "", "", "", EntityId[-1, "B*"], Record) If Get_Status(ErrCode) then Set_Status(0) Repository("NEW", EntityId, "", 1, 1, "", "", "", "", "", EntityId[-1, "B*"], Record) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", ErrCode, LogPos) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos) Get_Status(ErrCode) If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos) Get_Status(ErrCode) If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM end Set_Status(0) Repository("UNLOCK", EntityId) end end else GoSub WriteInherited end end end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n", ErrCode, LogPos) end end Next iEntityToPull EntitiesToCompile[-1, 1] = "" NumEntities = DCount(EntitiesToCompile, @FM) If NumEntities GT 0 then SRP_Git_Services("SendStatus", StatusCtrl, "\nCompiling ":NumEntities:" entities.\n", "", LogPos) For Each EntityId in EntitiesToCompile SRP_Git_Services("SendStatus", StatusCtrl, EntityId, "", LogPos) App = EntityId[1, "*"] If App EQ @APPID<1> then Set_Status(0) Repository("COMPILE", EntityId, 1) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Compile Errors\n", ErrCode, LogPos) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Compile Successful\n", "", LogPos) end end else GoSub CompileInherited end Next EntityId end else SRP_Git_Services("SendStatus", StatusCtrl, "\nNo entities to compile.\n", "", LogPos) end SRPGitListener_Suppress@ = "" end service Service OpenRepo() Name = "GUI" CmdPos = SrpGitGUICommand$ GoSub RunGitCommand If Assigned(ErrorMsg) then If Len(ErrorMsg) then Msg(@Window, ErrorMsg:@FM:@FM:@FM:"!") end end service Service Commit() Name = "Commit" CmdPos = SrpGitCommitCommand$ GoSub RunGitCommand end service Service Pull() Name = "Pull" CmdPos = SrpGitPullCommand$ GoSub RunGitCommand end service Service Push() Name = "Push" CmdPos = SrpGitPushCommand$ GoSub RunGitCommand end service Service ViewHist() Name = "ViewHist" CmdPos = SrpGitHistCommand$ GoSub RunGitCommand end service Service Diff() Name = "Diff" CmdPos = SrpGitDiffCommand$ GoSub RunGitCommand end service Service SendStatus(StatusCtrl, Text, ErrCode, Ref Pos) Swap "\n" with CRLF$ in Text OSOpen "SRPGitLog.txt" to hFile else hFile = "" If Len(StatusCtrl) then Send_Message(StatusCtrl, "INSERT", -1, Text) If Len(hFile) then OSBWrite text on hFile at Pos Pos += Len(Text) end If Len(ErrCode) then For Each ErrorInfo in ErrCode using @FM Text = " ":SRP_RevErrorMsg(ErrorInfo[1, @VM], ErrorInfo[Col2() + 1, Len(ErrorInfo)]):CRLF$ Swap "__SRP_GIT_TEMP" with "" in Text Send_Message(StatusCtrl, "INSERT", -1, Text) If Len(hFile) then OSBWrite text on hFile at Pos Pos += Len(Text) end Next ErrorCode end Yield() end If Len(hFile) then OSClose hFile end service RunGitCommand: ErrorList = '' If SRPGitServices_UserSettings@ EQ True$ then Command = SRPGitServices_UserSettings@ RepoPath = SRPGitServices_UserSettings@ If Command NE '' then If RepoPath NE '' then Utility("RUNWIN", Command, 1) end else // User has not set the Git repository location ErrorMsg = "Git repository location has not been defined within Git Settings" ErrorList<-1> = ErrorMsg end end else // User has not set the Git open repo command (Git GUI command) ErrorMsg = "Git ":Name:" command has not been configured within Git Settings" ErrorList<-1> = ErrorMsg end end else // User has Git disabled ErrorMsg = "Git must first be enabled within Git Settings" ErrorList<-1> = ErrorMsg end Response = ErrorList return CompileInherited: // IN: EntityId // Read the original source record DestList = SRP_Git_Serializer("EntityIdToKeys", EntityId) Record = Xlate(DestList<1, 1>, DestList<1, 2>, "", "X") // Build a temporary entity in the current app TempId = @APPID<1>:"*":Field(EntityID, "*", 2, 3):"__SRP_GIT_TEMP" Type = Field(EntityId, "*", 2, 1) // If this is a stored procedure or insert, we need to rename it temporarily IN THE CODE FirstLine = Record<1> If Type[1, 6] _EQC "STPROC" AND Len(Xlate("SYSOBJ", "$SRP_EDITOR_PARSE", "", "X")) then ProcType = If Type _EQC "STPROCINS" then "Insert" else "Procedure" OrigProcName = "" If SRP_Editor_Parse(FirstLine, "", ProcType, OrigProcName, "") then TempName = Field(TempId, "*", 4) TempFirstLine = FirstLine[1, "("] Swap OrigProcName with TempName in TempFirstLine If ProcType EQ "Insert" then Record<1> = TempFirstLine end else Record<1> = TempFirstLine:"(":FirstLine[-1, "B("] end end end // Update it and compile it SRPGitListener_Suppress@ = 1 Set_Status(0) Repository("WRITE", TempID, "", 1, 1, "", "", "", "", "", TempID[-1, "F*"], Record) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Failed to create Temprorary Entity.\n", ErrCode, LogPos) end else Set_Status(0) Repository("COMPILE", TempId) If Get_Status(ErrCode) then SRP_Git_Services("SendStatus", StatusCtrl, " -- Compile Errors\n", ErrCode, LogPos) end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Compile Successful\n", "", LogPos) // Copy the temporary records back to the entity records SourceList = SRP_Git_Serializer("EntityIdToKeys", TempId) NumItems = DCount(SourceList, @FM) For i = 1 to NumItems Table = SourceList SourceKey = SourceList DestKey = DestList If SourceKey NE DestKey then Open Table to hTable then Read Rec from hTable, SourceKey then If Table EQ "SYSPROCS" then Rec<1> = FirstLine Swap TempID with EntityID in Rec Write Rec to hTable, DestKey then null end end end Next i end end // Delete the local copy Set_Status(0) Repository("DESTROY", TempId) SRPGitListener_Suppress@ = "" return WriteInherited: // IN: EntityId, Record // Delete the actual records DestList = SRP_Git_Serializer("EntityIdToKeys", EntityId) Table = DestList<1, 1> DestKey = DestList<1, 2> Open Table to hTable then Lock hTable, DestKey then Write Record to hTable, DestKey then // Update or create the SYSREPOS record at the correct app level Open "SYSREPOS" to hSYSREPOS then RepoKey = DestList[-1, "B":@VM] Read RepoRec from hSYSREPOS, RepoKey else RepoRec = App RepoRec<2> = "$PUBLIC" RepoRec<3> = "$PUBLIC" RepoRec<18> = "0" RepoRec<20> = "1" RepoRec<21> = "1" RepoRec<22> = "0" RepoRec<23> = "1" RepoRec<26> = App RepoRec<27> = "Y" end RepoRec<24> = EntityId:"*":DateTime() RepoRec<25> = DateTime() Write RepoRec to hSYSREPOS, RepoKey then null end SRP_Git_Services("SendStatus", StatusCtrl, " -- Saved\n", "", LogPos) If Type EQ "STPROC" OR Type EQ "OIWIN" OR Type EQ "OIEVENT" then EntitiesToCompile := EntityId:@FM end Unlock hTable, DestKey end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Save Failed\n Locked!\n", "", LogPos) end end return DeleteInherited: // IN: EntityId, Record // Delete the actual records DestList = SRP_Git_Serializer("EntityIdToKeys", EntityId) NumItems = DCount(DestList, @FM) For i = 1 to NumItems Table = DestList DestKey = DestList Open Table to hTable then Lock hTable, DestKey then Delete hTable, DestKey then SRP_Git_Services("SendStatus", StatusCtrl, " -- Deleted\n", "", LogPos) end Unlock hTable, DestKey end else SRP_Git_Services("SendStatus", StatusCtrl, " -- Delete Failed\n Locked!\n", "", LogPos) end end Next i return