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
769 lines
30 KiB
Plaintext
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
|