From ad8f96120b8944b2466cea3716d01ecce4bee999 Mon Sep 17 00:00:00 2001 From: Pravin Barton <9560941+isc-pbarton@users.noreply.github.com> Date: Fri, 14 Feb 2025 14:12:58 -0500 Subject: [PATCH 1/2] enh: IPM pull event handler that uninstalls first --- CHANGELOG.md | 5 +++++ .../PullEventHandler/PackageManagerReload.cls | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls diff --git a/CHANGELOG.md b/CHANGELOG.md index 75acc778..c03940c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ 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.11.0] - Unreleased + +### Added +- Pull event handler that does an IPM uninstall and load to handle deletes (#631) + ## [2.10.0] - 2025-02-10 ### Added diff --git a/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls b/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls new file mode 100644 index 00000000..53f44efb --- /dev/null +++ b/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls @@ -0,0 +1,22 @@ +Class SourceControl.Git.PullEventHandler.PackageManagerReload Extends SourceControl.Git.PullEventHandler +{ + +Parameter NAME = "Package Manager Reload"; + +Parameter DESCRIPTION = "Does zpm ""uninstall"", then zpm ""load """; + +/// Subclasses may override to customize behavior on pull. +Method OnPull() As %Status +{ + set moduleFilePath = ##class(%File).NormalizeFilename("module.xml",..LocalRoot) + set sc = $System.OBJ.Load(moduleFilePath,"-d",,.internalName,1) // list-only load to get module name + $$$QuitOnError(sc) + set context = ##class(SourceControl.Git.PackageManagerContext).ForInternalName(internalName) + if $isobject(context.Package) { + set sc = ##class(%ZPM.PackageManager).Shell("uninstall "_context.Package.Name) + $$$QuitOnError(sc) + } + quit ##class(%ZPM.PackageManager).Shell("load "_..LocalRoot) +} + +} From 5e58d3a28968ef789a11a6b30f59243d98a1e7db Mon Sep 17 00:00:00 2001 From: Pravin Barton <9560941+isc-pbarton@users.noreply.github.com> Date: Fri, 14 Feb 2025 15:00:19 -0500 Subject: [PATCH 2/2] fix: ipm/zpm compatibility in package manager pull event handlers --- .../Git/PullEventHandler/PackageManager.cls | 8 ++++++-- .../Git/PullEventHandler/PackageManagerReload.cls | 12 ++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/cls/SourceControl/Git/PullEventHandler/PackageManager.cls b/cls/SourceControl/Git/PullEventHandler/PackageManager.cls index 357c6a85..42c39f87 100644 --- a/cls/SourceControl/Git/PullEventHandler/PackageManager.cls +++ b/cls/SourceControl/Git/PullEventHandler/PackageManager.cls @@ -8,7 +8,11 @@ Parameter DESCRIPTION = "Does zpm ""load """; /// Subclasses may override to customize behavior on pull. Method OnPull() As %Status { - quit ##class(%ZPM.PackageManager).Shell("load "_..LocalRoot) + set command = "load "_..LocalRoot + quit $select( + $$$comClassDefined("%IPM.Main"): ##class(%IPM.Main).Shell(command), + 1: ##class(%ZPM.PackageManager).Shell(command) + ) } -} \ No newline at end of file +} diff --git a/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls b/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls index 53f44efb..87cb3f5d 100644 --- a/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls +++ b/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls @@ -13,10 +13,18 @@ Method OnPull() As %Status $$$QuitOnError(sc) set context = ##class(SourceControl.Git.PackageManagerContext).ForInternalName(internalName) if $isobject(context.Package) { - set sc = ##class(%ZPM.PackageManager).Shell("uninstall "_context.Package.Name) + set command = "uninstall "_context.Package.Name + set sc = $select( + $$$comClassDefined("%IPM.Main"): ##class(%IPM.Main).Shell(command), + 1: ##class(%ZPM.PackageManager).Shell(command) + ) $$$QuitOnError(sc) } - quit ##class(%ZPM.PackageManager).Shell("load "_..LocalRoot) + set command = "load "_..LocalRoot + quit $select( + $$$comClassDefined("%IPM.Main"): ##class(%IPM.Main).Shell(command), + 1: ##class(%ZPM.PackageManager).Shell(command) + ) } }