From 0f6e24ff577c7e4514594494ef0fcbb290230522 Mon Sep 17 00:00:00 2001 From: Cameron Macintosh Date: Thu, 10 Sep 2026 08:20:06 -0500 Subject: [PATCH 1/2] fix: log bootstrapping errors to the Deployment log (#1000) --- cls/SourceControl/Git/DeploymentLog.cls | 5 +++++ cls/SourceControl/Git/PullEventHandler.cls | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cls/SourceControl/Git/DeploymentLog.cls b/cls/SourceControl/Git/DeploymentLog.cls index 2fc8bec7..62048205 100644 --- a/cls/SourceControl/Git/DeploymentLog.cls +++ b/cls/SourceControl/Git/DeploymentLog.cls @@ -11,6 +11,11 @@ Property HeadRevision As %String; Property Status As %Status; +Method FinalizeLog(pStatus As %Status, pTimestamp AS %TimeStamp = {$zdatetime($ztimestamp,3)}) { + set ..Status = pStatus + set ..EndTimestamp = pTimestamp +} + Storage Default { diff --git a/cls/SourceControl/Git/PullEventHandler.cls b/cls/SourceControl/Git/PullEventHandler.cls index 104db0ae..be5d504c 100644 --- a/cls/SourceControl/Git/PullEventHandler.cls +++ b/cls/SourceControl/Git/PullEventHandler.cls @@ -33,13 +33,17 @@ ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status set handlerClass = $select( $data(pullEventClass)#2: pullEventClass, 1: ##class(SourceControl.Git.Utils).PullEventClass()) - set st = ..BootstrapPullEventHandler(handlerClass) - quit:$$$ISERR(st) 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 st = ..BootstrapPullEventHandler(handlerClass) + if $$$ISERR(st) { + do log.FinalizeLog(st) + do log.%Save() + quit + } set event = $classmethod(handlerClass,"%New") set event.LocalRoot = ##class(SourceControl.Git.Utils).TempFolder() merge event.ModifiedFiles = files @@ -60,7 +64,7 @@ ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status } /// Makes sure class is compiled and can be instantiated, loading it from the -/// local repository if needed. +/// local repository if needed. ClassMethod BootstrapPullEventHandler(class As %String) As %Status [ Private ] { quit:$$$comClassDefined(class) $$$OK From fc87b1b1ce9cc62b7851c8ab34c231b03186d6ec Mon Sep 17 00:00:00 2001 From: Cameron Macintosh Date: Thu, 10 Sep 2026 08:37:02 -0500 Subject: [PATCH 2/2] refactor: extract methods and test (#1000) --- cls/SourceControl/Git/DeploymentLog.cls | 5 +++++ cls/SourceControl/Git/PullEventHandler.cls | 6 ++---- .../UnitTest/SourceControl/Git/DeploymentLog.cls | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 test/UnitTest/SourceControl/Git/DeploymentLog.cls diff --git a/cls/SourceControl/Git/DeploymentLog.cls b/cls/SourceControl/Git/DeploymentLog.cls index 62048205..ad90cb31 100644 --- a/cls/SourceControl/Git/DeploymentLog.cls +++ b/cls/SourceControl/Git/DeploymentLog.cls @@ -11,6 +11,11 @@ Property HeadRevision As %String; Property Status As %Status; +Method StartLog(pRevision As %String, pTimestamp AS %TimeStamp = {$zdatetime($ztimestamp,3)}) { + set ..HeadRevision = pRevision + set ..StartTimestamp = pTimestamp +} + Method FinalizeLog(pStatus As %Status, pTimestamp AS %TimeStamp = {$zdatetime($ztimestamp,3)}) { set ..Status = pStatus set ..EndTimestamp = pTimestamp diff --git a/cls/SourceControl/Git/PullEventHandler.cls b/cls/SourceControl/Git/PullEventHandler.cls index be5d504c..1c514436 100644 --- a/cls/SourceControl/Git/PullEventHandler.cls +++ b/cls/SourceControl/Git/PullEventHandler.cls @@ -34,8 +34,7 @@ ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status $data(pullEventClass)#2: pullEventClass, 1: ##class(SourceControl.Git.Utils).PullEventClass()) set log = ##class(SourceControl.Git.DeploymentLog).%New() - set log.HeadRevision = ##class(SourceControl.Git.Utils).GetCurrentRevision() - set log.StartTimestamp = $zdatetime($ztimestamp,3) + do log.StartLog(##class(SourceControl.Git.Utils).GetCurrentRevision()) set st = log.%Save() quit:$$$ISERR(st) set st = ..BootstrapPullEventHandler(handlerClass) @@ -53,8 +52,7 @@ ClassMethod ForModifications(ByRef files, pullEventClass As %String) As %Status catch pullError { set st = pullError.AsStatus() } - set log.EndTimestamp = $zdatetime($ztimestamp,3) - set log.Status = st + do log.FinalizeLog(st) set st = log.%Save() // this hides any errors returned or thrown by OnPull() quit:$$$ISERR(st) } catch err { diff --git a/test/UnitTest/SourceControl/Git/DeploymentLog.cls b/test/UnitTest/SourceControl/Git/DeploymentLog.cls new file mode 100644 index 00000000..ae4da7af --- /dev/null +++ b/test/UnitTest/SourceControl/Git/DeploymentLog.cls @@ -0,0 +1,16 @@ +Class UnitTest.SourceControl.Git.DeploymentLog Extends %UnitTest.TestCase +{ + +Method TestLogActions() { + set log = ##class(SourceControl.Git.DeploymentLog).%New() + set timestamp = "2026-09-10 08:20:00" // Use a static timestamp to verify properties are set. + do log.StartLog("face123", timestamp) + do $$$AssertEquals(log.HeadRevision, "face123") + do $$$AssertEquals(log.StartTimestamp, timestamp) + + do log.FinalizeLog($$$OK, timestamp) + do $$$AssertStatusOK(log.Status) + do $$$AssertEquals(log.EndTimestamp, timestamp) +} + +}