From 49fbdf6f34b69a0157addcda2e28a96227a72630 Mon Sep 17 00:00:00 2001 From: Nir Bar Date: Tue, 25 Feb 2025 11:31:17 +0200 Subject: ForceAbsent can now remove a package even if it still has dependents Resolves 8962 --- src/burn/engine/dependency.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/burn/engine/dependency.cpp') diff --git a/src/burn/engine/dependency.cpp b/src/burn/engine/dependency.cpp index 767d5004..6f80c21b 100644 --- a/src/burn/engine/dependency.cpp +++ b/src/burn/engine/dependency.cpp @@ -419,6 +419,7 @@ extern "C" HRESULT DependencyPlanPackageBegin( STRINGDICT_HANDLE sdIgnoredDependents = NULL; BURN_DEPENDENCY_ACTION dependencyExecuteAction = BURN_DEPENDENCY_ACTION_NONE; BURN_DEPENDENCY_ACTION dependencyRollbackAction = BURN_DEPENDENCY_ACTION_NONE; + BOOL fDependenciesForcedAbsent = FALSE; BOOL fDependentBlocksUninstall = FALSE; BOOL fAttemptingUninstall = BOOTSTRAPPER_ACTION_STATE_UNINSTALL == pPackage->execute || pPackage->compatiblePackage.fRemove; @@ -467,7 +468,16 @@ extern "C" HRESULT DependencyPlanPackageBegin( { hr = S_OK; - if (!fDependentBlocksUninstall) + if (BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT == pPackage->requested) + { + if (!fDependenciesForcedAbsent) + { + fDependenciesForcedAbsent = TRUE; + + LogId(REPORT_STANDARD, MSG_DEPENDENCY_PACKAGE_DEPENDENTS_OVERRIDDEN, pPackage->sczId); + } + } + else if (!fDependentBlocksUninstall) { fDependentBlocksUninstall = TRUE; -- cgit v1.2.3-55-g6feb