aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/plan.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-04-22 16:55:29 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-04-23 15:40:21 -0500
commit72e20f682c0d64102e86439ba5527dd0d71932ae (patch)
treec62618b0f6b99d3bffa3c6cd01251a29b84fcc05 /src/burn/engine/plan.cpp
parentb82c6a2b7d451212fb0b2e32ca4d5d86c953d81a (diff)
downloadwix-72e20f682c0d64102e86439ba5527dd0d71932ae.tar.gz
wix-72e20f682c0d64102e86439ba5527dd0d71932ae.tar.bz2
wix-72e20f682c0d64102e86439ba5527dd0d71932ae.zip
Add RepairCondition.
Fixes 6758
Diffstat (limited to 'src/burn/engine/plan.cpp')
-rw-r--r--src/burn/engine/plan.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index 2c267415..47da22c0 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -347,6 +347,7 @@ extern "C" HRESULT PlanDefaultPackageRequestState(
347 __in BOOTSTRAPPER_PACKAGE_STATE currentState, 347 __in BOOTSTRAPPER_PACKAGE_STATE currentState,
348 __in BOOTSTRAPPER_ACTION action, 348 __in BOOTSTRAPPER_ACTION action,
349 __in BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition, 349 __in BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition,
350 __in BOOTSTRAPPER_PACKAGE_CONDITION_RESULT repairCondition,
350 __in BOOTSTRAPPER_RELATION_TYPE relationType, 351 __in BOOTSTRAPPER_RELATION_TYPE relationType,
351 __out BOOTSTRAPPER_REQUEST_STATE* pRequestState 352 __out BOOTSTRAPPER_REQUEST_STATE* pRequestState
352 ) 353 )
@@ -408,6 +409,10 @@ extern "C" HRESULT PlanDefaultPackageRequestState(
408 { 409 {
409 defaultRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT <= defaultRequestState ? BOOTSTRAPPER_REQUEST_STATE_NONE : defaultRequestState; 410 defaultRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT <= defaultRequestState ? BOOTSTRAPPER_REQUEST_STATE_NONE : defaultRequestState;
410 } 411 }
412 else if (BOOTSTRAPPER_ACTION_REPAIR == action && BOOTSTRAPPER_PACKAGE_CONDITION_FALSE == repairCondition)
413 {
414 defaultRequestState = BOOTSTRAPPER_REQUEST_STATE_PRESENT;
415 }
411 } 416 }
412 417
413 *pRequestState = defaultRequestState; 418 *pRequestState = defaultRequestState;
@@ -905,7 +910,8 @@ static HRESULT InitializePackage(
905{ 910{
906 HRESULT hr = S_OK; 911 HRESULT hr = S_OK;
907 BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition = BOOTSTRAPPER_PACKAGE_CONDITION_DEFAULT; 912 BOOTSTRAPPER_PACKAGE_CONDITION_RESULT installCondition = BOOTSTRAPPER_PACKAGE_CONDITION_DEFAULT;
908 BOOL fInstallCondition = FALSE; 913 BOOTSTRAPPER_PACKAGE_CONDITION_RESULT repairCondition = BOOTSTRAPPER_PACKAGE_CONDITION_DEFAULT;
914 BOOL fEvaluatedCondition = FALSE;
909 BOOL fBeginCalled = FALSE; 915 BOOL fBeginCalled = FALSE;
910 BOOTSTRAPPER_RELATION_TYPE relationType = pPlan->pCommand->relationType; 916 BOOTSTRAPPER_RELATION_TYPE relationType = pPlan->pCommand->relationType;
911 917
@@ -927,20 +933,28 @@ static HRESULT InitializePackage(
927 933
928 if (pPackage->sczInstallCondition && *pPackage->sczInstallCondition) 934 if (pPackage->sczInstallCondition && *pPackage->sczInstallCondition)
929 { 935 {
930 hr = ConditionEvaluate(pVariables, pPackage->sczInstallCondition, &fInstallCondition); 936 hr = ConditionEvaluate(pVariables, pPackage->sczInstallCondition, &fEvaluatedCondition);
931 ExitOnFailure(hr, "Failed to evaluate install condition."); 937 ExitOnFailure(hr, "Failed to evaluate install condition.");
932 938
933 installCondition = fInstallCondition ? BOOTSTRAPPER_PACKAGE_CONDITION_TRUE : BOOTSTRAPPER_PACKAGE_CONDITION_FALSE; 939 installCondition = fEvaluatedCondition ? BOOTSTRAPPER_PACKAGE_CONDITION_TRUE : BOOTSTRAPPER_PACKAGE_CONDITION_FALSE;
940 }
941
942 if (pPackage->sczRepairCondition && *pPackage->sczRepairCondition)
943 {
944 hr = ConditionEvaluate(pVariables, pPackage->sczRepairCondition, &fEvaluatedCondition);
945 ExitOnFailure(hr, "Failed to evaluate repair condition.");
946
947 repairCondition = fEvaluatedCondition ? BOOTSTRAPPER_PACKAGE_CONDITION_TRUE : BOOTSTRAPPER_PACKAGE_CONDITION_FALSE;
934 } 948 }
935 949
936 // Remember the default requested state so the engine doesn't get blamed for planning the wrong thing if the BA changes it. 950 // Remember the default requested state so the engine doesn't get blamed for planning the wrong thing if the BA changes it.
937 hr = PlanDefaultPackageRequestState(pPackage->type, pPackage->currentState, pPlan->action, installCondition, relationType, &pPackage->defaultRequested); 951 hr = PlanDefaultPackageRequestState(pPackage->type, pPackage->currentState, pPlan->action, installCondition, repairCondition, relationType, &pPackage->defaultRequested);
938 ExitOnFailure(hr, "Failed to set default package state."); 952 ExitOnFailure(hr, "Failed to set default package state.");
939 953
940 pPackage->requested = pPackage->defaultRequested; 954 pPackage->requested = pPackage->defaultRequested;
941 fBeginCalled = TRUE; 955 fBeginCalled = TRUE;
942 956
943 hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, pPackage->currentState, pPackage->fCached, installCondition, &pPackage->requested, &pPackage->cacheType); 957 hr = UserExperienceOnPlanPackageBegin(pUX, pPackage->sczId, pPackage->currentState, pPackage->fCached, installCondition, repairCondition, &pPackage->requested, &pPackage->cacheType);
944 ExitOnRootFailure(hr, "BA aborted plan package begin."); 958 ExitOnRootFailure(hr, "BA aborted plan package begin.");
945 959
946 if (BURN_PACKAGE_TYPE_MSI == pPackage->type) 960 if (BURN_PACKAGE_TYPE_MSI == pPackage->type)