From 03607e992943521971f328c5b08d3655598a32a4 Mon Sep 17 00:00:00 2001 From: Pravin Barton <9560941+isc-pbarton@users.noreply.github.com> Date: Fri, 24 Jan 2025 10:27:06 -0500 Subject: [PATCH 1/3] fix: no longer deploy every PTD item twice --- CHANGELOG.md | 1 + cls/SourceControl/Git/Utils.cls | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfd56512..92caebf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed Import All options not importing the Embedded Git configuration file - Improved performance of IDE editing and baselining of decomposed productions - Fixed Discard / Stash not working on deletes (#688) +- Improved performance of deploying changes to decomposed production items (#690) ## [2.9.0] - 2025-01-09 diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index 2d98c00b..c09625fb 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -754,6 +754,7 @@ ClassMethod Exists(ByRef pFilename) As %Boolean Return 0 } +/// Adds this item to the list of items that are tracked by source control ClassMethod AddToServerSideSourceControl(InternalName As %String) As %Status { #dim i as %Integer @@ -764,10 +765,6 @@ ClassMethod AddToServerSideSourceControl(InternalName As %String) As %Status continue } set @..#Storage@("items", item) = "" - #dim sc as %Status = ..ImportItem(item, 1) - if 'sc { - set ec = $$$ADDSC(ec, sc) - } } quit ec } From b00637c0d0e40311591065004e115fc8190bc609 Mon Sep 17 00:00:00 2001 From: Pravin Barton <9560941+isc-pbarton@users.noreply.github.com> Date: Fri, 24 Jan 2025 10:32:58 -0500 Subject: [PATCH 2/3] enh: logging for Git deployments into IRIS --- CHANGELOG.md | 1 + cls/SourceControl/Git/DeploymentLog.cls | 44 ++++++++++++++++++++++ cls/SourceControl/Git/PullEventHandler.cls | 10 ++++- 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 cls/SourceControl/Git/DeploymentLog.cls diff --git a/CHANGELOG.md b/CHANGELOG.md index 92caebf8..c68c4d8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - LoadProductionsFromDirectory method to help custom deployment scripts load decomposed productions from the repository (#670) - Added ability to reset head / revert most recent commit (#586) +- Changes deployed through Git are now logged in a new table SourceControl_Git.DeploymentLog ### Fixed - Fixed not showing warnings on Studio (#660) diff --git a/cls/SourceControl/Git/DeploymentLog.cls b/cls/SourceControl/Git/DeploymentLog.cls new file mode 100644 index 00000000..2fc8bec7 --- /dev/null +++ b/cls/SourceControl/Git/DeploymentLog.cls @@ -0,0 +1,44 @@ +Class SourceControl.Git.DeploymentLog Extends %Persistent [ Owner = {%Developer} ] +{ + +Property Token As %String [ InitialExpression = {$System.Util.CreateGUID()} ]; + +Property StartTimestamp As %TimeStamp; + +Property EndTimestamp As %TimeStamp; + +Property HeadRevision As %String; + +Property Status As %Status; + +Storage Default +{ + + +%%CLASSNAME + + +Token + + +StartTimestamp + + +EndTimestamp + + +HeadRevision + + +Status + + +^SourceContro22B9.DeploymentLogD +DeploymentLogDefaultData +^SourceContro22B9.DeploymentLogD +^SourceContro22B9.DeploymentLogI +^SourceContro22B9.DeploymentLogS +%Storage.Persistent +} + +} diff --git a/cls/SourceControl/Git/PullEventHandler.cls b/cls/SourceControl/Git/PullEventHandler.cls index ceb86f3b..88cbb196 100644 --- a/cls/SourceControl/Git/PullEventHandler.cls +++ b/cls/SourceControl/Git/PullEventHandler.cls @@ -24,6 +24,10 @@ Method OnPull() As %Status [ Abstract ] /// pullEventClass: if defined, override the configured pull event class ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status { + set log = ##class(SourceControl.Git.DeploymentLog).%New() + set log.HeadRevision = ##class(SourceControl.Git.Utils).GetCurrentRevision() + set log.StartTimestamp = $zdatetime($ztimestamp,3) + do log.%Save() set event = $classmethod( $select( $data(pullEventClass)#2: pullEventClass, @@ -31,7 +35,11 @@ ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status ,"%New") set event.LocalRoot = ##class(SourceControl.Git.Utils).TempFolder() merge event.ModifiedFiles = files - quit event.OnPull() + set st = event.OnPull() + set log.EndTimestamp = $zdatetime($ztimestamp,3) + set log.Status = st + do log.%Save() + quit st } /// InternalName may be a comma-delimited string or $ListBuild list From a6c3de4b414cf44833d47718d3f0ec9e84163d41 Mon Sep 17 00:00:00 2001 From: Pravin Barton <9560941+isc-pbarton@users.noreply.github.com> Date: Mon, 27 Jan 2025 11:38:53 -0500 Subject: [PATCH 3/3] fix: improved error handling on pull event handlers --- cls/SourceControl/Git/PullEventHandler.cls | 37 +++++++++++++--------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/cls/SourceControl/Git/PullEventHandler.cls b/cls/SourceControl/Git/PullEventHandler.cls index 88cbb196..ea7cfeae 100644 --- a/cls/SourceControl/Git/PullEventHandler.cls +++ b/cls/SourceControl/Git/PullEventHandler.cls @@ -24,21 +24,28 @@ Method OnPull() As %Status [ Abstract ] /// pullEventClass: if defined, override the configured pull event class ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status { - set log = ##class(SourceControl.Git.DeploymentLog).%New() - set log.HeadRevision = ##class(SourceControl.Git.Utils).GetCurrentRevision() - set log.StartTimestamp = $zdatetime($ztimestamp,3) - do log.%Save() - set event = $classmethod( - $select( - $data(pullEventClass)#2: pullEventClass, - 1: ##class(SourceControl.Git.Utils).PullEventClass()) - ,"%New") - set event.LocalRoot = ##class(SourceControl.Git.Utils).TempFolder() - merge event.ModifiedFiles = files - set st = event.OnPull() - set log.EndTimestamp = $zdatetime($ztimestamp,3) - set log.Status = st - do log.%Save() + set st = $$$OK + try { + set log = ##class(SourceControl.Git.DeploymentLog).%New() + set log.HeadRevision = ##class(SourceControl.Git.Utils).GetCurrentRevision() + set log.StartTimestamp = $zdatetime($ztimestamp,3) + set st = log.%Save() + quit:$$$ISERR(st) + set event = $classmethod( + $select( + $data(pullEventClass)#2: pullEventClass, + 1: ##class(SourceControl.Git.Utils).PullEventClass()) + ,"%New") + set event.LocalRoot = ##class(SourceControl.Git.Utils).TempFolder() + merge event.ModifiedFiles = files + set st = event.OnPull() + set log.EndTimestamp = $zdatetime($ztimestamp,3) + set log.Status = st + set st = log.%Save() + quit:$$$ISERR(st) + } catch err { + set st = err.AsStatus() + } quit st }