diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ecca164..908f36e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.15.1] - Unreleased +## [2.16.0] - Unreleased + +### Added +- Baseline Export now includes decomposed production items when production decomposition is enabled (#680) ## Fixed - Fixed issue where Generated Files Read-only option didn't entirely work for files not in source control (#712) diff --git a/cls/SourceControl/Git/Util/Production.cls b/cls/SourceControl/Git/Util/Production.cls index c9a915d1..a4e03490 100644 --- a/cls/SourceControl/Git/Util/Production.cls +++ b/cls/SourceControl/Git/Util/Production.cls @@ -44,7 +44,6 @@ ClassMethod BaselineProduction(productionName, settings As SourceControl.Git.Set /// Baselines all productions in this namespace from single-file to decomposed or vice versa. ClassMethod BaselineProductions() { - set st = $$$OK set settings = ##class(SourceControl.Git.Settings).%New() set rs = ##class(%Dictionary.ClassDefinition).SubclassOfFunc("Ens.Production") throw:rs.%SQLCODE<0 ##class(%Exception.SQL).CreateFromSQLCODE(rs.%SQLCODE,rs.%Message) diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index f2faa53a..0e82f223 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -3115,6 +3115,7 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status { set sc = $$$OK try { + set settings = ##class(SourceControl.Git.Settings).%New() write !, "Exporting items..." set rs = ##class(%Library.RoutineMgr).StudioOpenDialogFunc( "*.mac,*.int,*.inc,*.cls,*.csp,*.xsl,*.HL7,*.LUT,*.AST,*.X12" @@ -3134,6 +3135,9 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status continue:($isobject(context.Package) && 'context.IsInDefaultPackage) $$$ThrowOnError(..AddToSourceControl(internalName)) } + if settings.decomposeProductions && ##class(%Library.EnsembleMgr).IsEnsembleNamespace() { + do ##class(SourceControl.Git.Util.Production).BaselineProductions() + } if pCommitMessage '= "" { // switch to default context do ##class(SourceControl.Git.PackageManagerContext).ForInternalName("") diff --git a/module.xml b/module.xml index 794c8340..a04479c8 100644 --- a/module.xml +++ b/module.xml @@ -3,7 +3,7 @@ git-source-control - 2.15.1 + 2.16.0 Server-side source control extension for use of Git on InterSystems platforms git source control studio vscode module diff --git a/test/UnitTest/SourceControl/Git/BaselineExport.cls b/test/UnitTest/SourceControl/Git/BaselineExport.cls index e02297bb..71611406 100644 --- a/test/UnitTest/SourceControl/Git/BaselineExport.cls +++ b/test/UnitTest/SourceControl/Git/BaselineExport.cls @@ -1,6 +1,8 @@ Class UnitTest.SourceControl.Git.BaselineExport Extends %UnitTest.TestCase { +Parameter ProductionName = "UnitTest.BaselineExportProduction"; + Method TestBaselineExport() { // create a mac routine @@ -33,10 +35,45 @@ Method TestBaselineExport() do $$$AssertTrue(##class(SourceControl.Git.Utils).IsInSourceControl("TestPkg.Class.cls")) } +Method TestBaselineExportWithDecomposedProduction() +{ + do $System.OBJ.Delete(..#ProductionName) + set settings = ##class(SourceControl.Git.Settings).%New() + set settings.decomposeProductions = 1 + $$$ThrowOnError(settings.%Save()) + $$$ThrowOnError(##class(SourceControl.Git.Production).CreateProduction(..#ProductionName)) + do ..ReplaceProductionDefinition() + do $$$AssertNotTrue(##class(SourceControl.Git.Utils).IsInSourceControl(..#ProductionName_".cls")) + do $$$AssertNotTrue(##class(SourceControl.Git.Utils).IsInSourceControl(..#ProductionName_"||ProductionSettings-"_..#ProductionName_".PTD")) + do $$$AssertNotTrue(##class(SourceControl.Git.Utils).IsInSourceControl(..#ProductionName_"||Settings-a|Ens.Activity.Operation.Local.PTD")) + do $$$AssertStatusOK(##class(SourceControl.Git.API).BaselineExport()) + do $$$AssertTrue(##class(SourceControl.Git.Utils).IsInSourceControl(..#ProductionName_"||ProductionSettings-"_..#ProductionName_".PTD")) + do $$$AssertTrue(##class(SourceControl.Git.Utils).IsInSourceControl(..#ProductionName_"||Settings-a|Ens.Activity.Operation.Local.PTD")) +} + Property InitialExtension As %String [ InitialExpression = {##class(%Studio.SourceControl.Interface).SourceControlClassGet()} ]; Property SourceControlGlobal [ MultiDimensional ]; +ClassMethod ReplaceProductionDefinition() +{ + set productionClass = ##class(%Dictionary.ClassDefinition).%OpenId(..#ProductionName) + do productionClass.XDatas.Clear() + set productionXData = ##class(%Dictionary.XDataDefinition).%New() + set xdata = ##class(%Dictionary.XDataDefinition).IDKEYOpen($classname(),"ProductionDefinition",,.st) + $$$ThrowOnError(st) + set productionXData = xdata.%ConstructClone(1) + set productionXData.Name = "ProductionDefinition" + set st = productionClass.XDatas.Insert(productionXData) + $$$ThrowOnError(st) + set st = productionClass.%Save() + $$$ThrowOnError(st) + set st = $System.OBJ.Compile(..#ProductionName) + $$$ThrowOnError(st) + set st = ##class(Ens.Production).Update() + $$$ThrowOnError(st) +} + Method %OnNew(initvalue) As %Status { Merge ..SourceControlGlobal = ^SYS("SourceControl") @@ -45,6 +82,7 @@ Method %OnNew(initvalue) As %Status Set settings.namespaceTemp = ##class(%Library.File).TempFilename()_"dir" Set settings.Mappings("MAC","*")="rtn/" Set settings.Mappings("CLS","*")="cls/" + Set settings.Mappings("PTD","*")="ptd/" Do settings.%Save() Do ##class(%Studio.SourceControl.Interface).SourceControlClassSet("SourceControl.Git.Extension") Quit ##super(initvalue) @@ -55,7 +93,17 @@ Method %OnClose() As %Status [ Private, ServerOnly = 1 ] Do ##class(%Studio.SourceControl.Interface).SourceControlClassSet(..InitialExtension) Kill ^SYS("SourceControl") Merge ^SYS("SourceControl") = ..SourceControlGlobal + Do $System.OBJ.Delete(..#ProductionName) Quit $$$OK } +XData ProductionDefinition +{ + + + 61 + + +} + }