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/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 new file mode 100644 index 00000000..87cb3f5d --- /dev/null +++ b/cls/SourceControl/Git/PullEventHandler/PackageManagerReload.cls @@ -0,0 +1,30 @@ +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 command = "uninstall "_context.Package.Name + set sc = $select( + $$$comClassDefined("%IPM.Main"): ##class(%IPM.Main).Shell(command), + 1: ##class(%ZPM.PackageManager).Shell(command) + ) + $$$QuitOnError(sc) + } + set command = "load "_..LocalRoot + quit $select( + $$$comClassDefined("%IPM.Main"): ##class(%IPM.Main).Shell(command), + 1: ##class(%ZPM.PackageManager).Shell(command) + ) +} + +}