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
}