diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2022-04-22 16:55:29 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2022-04-23 15:40:21 -0500 |
commit | 72e20f682c0d64102e86439ba5527dd0d71932ae (patch) | |
tree | c62618b0f6b99d3bffa3c6cd01251a29b84fcc05 /src/burn/engine/plan.cpp | |
parent | b82c6a2b7d451212fb0b2e32ca4d5d86c953d81a (diff) | |
download | wix-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.cpp | 24 |
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) |