open-insight/SYSPROG/STPROC/SRP_GIT_SERVICES.txt
Infineon\StieberD ab8f9d3c24 Alarm trigger with NICA_ORDERS table
solution tested and ready for deployment

updated SRP_Git_Services to handle creating local copies of inherited entities

updated HgCV OCAP order trigger to also look for active prove-in orders

moved error services common into sysprog to avoid compilation issues
2025-01-20 12:25:09 -07:00

769 lines
30 KiB
Plaintext

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@<SrpGitRepoLoc$>) GT 0 AND Len(SRPGitServices_UserSettings@<SrpGitExePath$>) GT 0
end service
Service IsEnabled()
Response = If Len(SRPGitServices_UserSettings@<SrpGitEnabled$>) then SRPGitServices_UserSettings@<SrpGitEnabled$> else 0
end service
Service GetRepoPath()
Response = SRPGitServices_UserSettings@<SrpGitRepoLoc$>
end service
Service GetGitPath()
Response = SRPGitServices_UserSettings@<SrpGitExePath$>
end service
Service GetGuiCommand()
Response = SRPGitServices_UserSettings@<SrpGitGUICommand$>
end service
Service GetCommitCommand()
Response = SRPGitServices_UserSettings@<SrpGitCommitCommand$>
end service
Service GetPullCommand()
Response = SRPGitServices_UserSettings@<SrpGitPullCommand$>
end service
Service GetPushCommand()
Response = SRPGitServices_UserSettings@<SrpGitPushCommand$>
end service
Service GetHistCommand()
Response = SRPGitServices_UserSettings@<SrpGitHistCommand$>
end service
Service GetDiffCommand()
Response = SRPGitServices_UserSettings@<SrpGitDiffCommand$>
end service
Service GetWarning()
Response = SRPGitServices_UserSettings@<SrpGitWarning$>
end service
Service GetCurrentCommit()
If Len(SRPGitServices_UserSettings@<SrpGitExePath$>) then
Root = SRPGitServices_UserSettings@<SrpGitExePath$>:' -C "':SRPGitServices_UserSettings@<SrpGitRepoLoc$>:'"'
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@<SrpGitExePath$>) then
Root = SRPGitServices_UserSettings@<SrpGitExePath$>:' -C "':SRPGitServices_UserSettings@<SrpGitRepoLoc$>:'"'
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@<SrpGitExePath$>) then
Root = SRPGitServices_UserSettings@<SrpGitExePath$>:' -C "':SRPGitServices_UserSettings@<SrpGitRepoLoc$>:'"'
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@<SrpGitExePath$>
RepoPath = SRPGitServices_UserSettings@<SrpGitRepoLoc$>
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@<SrpGitEnabled$> = GitEnabled
SRPGitServices_UserSettings@<SrpGitRepoLoc$> = GitRepoLoc
SRPGitServices_UserSettings@<SrpGitExePath$> = GitExePath
SRPGitServices_UserSettings@<SrpGitGUICommand$> = GitGUICommand
SRPGitServices_UserSettings@<SrpGitWarning$> = GitWarning
SRPGitServices_UserSettings@<SrpGitCommitCommand$> = GitCommitCommand
SRPGitServices_UserSettings@<SrpGitPullCommand$> = GitPullCommand
SRPGitServices_UserSettings@<SrpGitPushCommand$> = GitPushCommand
SRPGitServices_UserSettings@<SrpGitHistCommand$> = GitHistCommand
SRPGitServices_UserSettings@<SrpGitDiffCommand$> = 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@<SrpGitRepoLoc$>
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<iDir>
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@<SrpGitRepoLoc$>
NumEntities = DCount(EntityList, @FM)
SRP_Git_Services("SendStatus", StatusCtrl, "Pushing ":NumEntities:" entities.\n", "", LogPos)
For i = 1 to NumEntities
EntityId = EntityList<i>
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@<SrpGitExePath$>
RepoPath = SRPGitServices_UserSettings@<SrpGitRepoLoc$>
EntitiesToCompile = ''
NumEntities = DCount(EntityList, @FM)
SRP_Git_Services("SendStatus", StatusCtrl, "Pulling ":NumEntities:" entities.\n", "", LogPos)
For iEntityToPull = 1 to NumEntities
EntityId = EntityList<iEntityToPull>
Status = StatusList<iEntityToPull>
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@<SrpGitEnabled$> EQ True$ then
Command = SRPGitServices_UserSettings@<CmdPos>
RepoPath = SRPGitServices_UserSettings@<SrpGitRepoLoc$>
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<i, 1>
SourceKey = SourceList<i, 2>
DestKey = DestList<i, 2>
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<i, 1>
DestKey = DestList<i, 2>
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