Skip to content

Commit 01d0759

Browse files
committed
deletes of PTD items now delete associated config item from production
not fully working because deleting items with git pull does not work
1 parent 098a708 commit 01d0759

File tree

3 files changed

+39
-7
lines changed

3 files changed

+39
-7
lines changed

cls/SourceControl/Git/Production.cls

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,11 @@ ClassMethod ParseExternalName(externalName, Output internalName)
266266
}
267267
}
268268

269-
/// Given an internal name for a PTD item, returns a suggested filename for export.
270-
ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fileName)
269+
/// Given an internal name for a PTD item, returns a suggested filename for export, as well as:
270+
/// - itemName: name of the configuration item
271+
/// - productionName: name of the associated production
272+
/// - isProdSettings: if true, this item is a production settings; if false, this item is a configuration item settings
273+
ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fileName, Output itemName, Output productionName, Output isProdSettings As %Boolean)
271274
{
272275
set name = $piece(internalName,".",1,*-1)
273276
if 'noFolders {
@@ -276,9 +279,10 @@ ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fi
276279
}
277280
// Abbreviate "ProductionSettings" to "ProdStgs", "Settings" to "Stgs".
278281
Set prefix = $Case($Extract(name), "P":"ProdStgs-", "S":"Stgs-", :"")
279-
Set name = prefix_$Piece(name,"-",2,*)
282+
set isProdSettings = ($Extract(name) = "P")
283+
Set name = $Piece(name,"-",2,*)
280284
set $ListBuild(itemName, itemClassName) = $ListFromString(name, "|")
281-
set name = $select(
285+
set name = prefix_$select(
282286
$get(itemClassName) '= "": itemName_$zhex($zcrc(itemClassName,6)),
283287
1: name
284288
)
@@ -288,4 +292,28 @@ ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fi
288292
set fileName = $translate($replace(name, ".", "_") _ ".xml", "\", "/")
289293
}
290294

295+
/// Given an internal name for a PTD item, removes that item from the production.
296+
ClassMethod RemoveItem(internalName, noFolders As %Boolean = 0) As %Status
297+
{
298+
set sc = $$$OK
299+
try {
300+
if '##class(%Library.EnsembleMgr).IsEnsembleNamespace() {
301+
quit
302+
}
303+
do ..ParseInternalName(internalName, noFolders, , .itemName, .productionName, .isProdSettings)
304+
if 'isProdSettings {
305+
set production = ##class(Ens.Config.Production).%OpenId(productionName,,.sc)
306+
quit:$$$ISERR(sc)
307+
set configItem = production.OpenItemByConfigName(itemName,.sc)
308+
quit:$$$ISERR(sc)
309+
do production.RemoveItem(configItem)
310+
set sc = production.%Save()
311+
quit:$$$ISERR(sc)
312+
}
313+
} catch err {
314+
set sc = err.AsStatus()
315+
}
316+
return sc
317+
}
318+
291319
}

cls/SourceControl/Git/PullEventHandler/IncrementalLoad.cls

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ Method DeleteFile(item As %String) As %Status
4343
set sc = $$$OK
4444
set type = ##class(SourceControl.Git.Utils).Type(item)
4545
set name = ##class(SourceControl.Git.Utils).NameWithoutExtension(item)
46+
set settings = ##class(SourceControl.Git.Settings).%New()
4647
set deleted = 1
4748
if type = "prj" {
4849
set sc = $system.OBJ.DeleteProject(name)
@@ -52,6 +53,11 @@ Method DeleteFile(item As %String) As %Status
5253
set sc = ##class(%Routine).Delete(item)
5354
}elseif type = "csp" {
5455
set sc = $System.CSP.DeletePage(item)
56+
} elseif settings.decomposeProductions && (type = "ptd") {
57+
set sc = ##class(%SYSTEM.Status).AppendStatus(
58+
##class(SourceControl.Git.Production).RemoveItem(item),
59+
##class(%Library.RoutineMgr).Delete(item)
60+
)
5561
}elseif ##class(SourceControl.Git.Utils).UserTypeCached(item) {
5662
set sc = ##class(%Library.RoutineMgr).Delete(item)
5763
} else {
@@ -71,4 +77,3 @@ Method DeleteFile(item As %String) As %Status
7177
}
7278

7379
}
74-

cls/SourceControl/Git/Utils.cls

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,7 @@ ClassMethod ImportItem(InternalName As %String, force As %Boolean = 0, verbose A
12641264
set type = ..Type(InternalName)
12651265
set imported = 1
12661266
if ..IsRoutineOutdated(InternalName) || force || (type = "ptd"){
1267-
if (type = "ptd") && ##class(%Library.EnsembleMgr).IsEnsembleNamespace() {
1267+
if (type = "ptd") && settings.decomposeProductions && ##class(%Library.EnsembleMgr).IsEnsembleNamespace() {
12681268
// Deployment manager should not reexport because studio project file includes timestamp
12691269
// ideally we could just new %SourceControl, but Ens portal config pages do not use %SourceControl
12701270
new %gscSkipSaveHooks
@@ -2682,4 +2682,3 @@ ClassMethod BaselineExport(pCommitMessage = "", pPushToRemote = "") As %Status
26822682
}
26832683

26842684
}
2685-

0 commit comments

Comments
 (0)