diff --git a/cls/SourceControl/Git/DeploymentLog.cls b/cls/SourceControl/Git/DeploymentLog.cls index 2fc8bec7..ad90cb31 100644 --- a/cls/SourceControl/Git/DeploymentLog.cls +++ b/cls/SourceControl/Git/DeploymentLog.cls @@ -11,6 +11,16 @@ 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 +} + Storage Default { diff --git a/cls/SourceControl/Git/PullEventHandler.cls b/cls/SourceControl/Git/PullEventHandler.cls index 104db0ae..1c514436 100644 --- a/cls/SourceControl/Git/PullEventHandler.cls +++ b/cls/SourceControl/Git/PullEventHandler.cls @@ -33,13 +33,16 @@ 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) + do log.StartLog(##class(SourceControl.Git.Utils).GetCurrentRevision()) 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 @@ -49,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 { @@ -60,7 +62,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 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) +} + +}