@joebigelow / wix-1 / commits / 837f2e30

Only the requested state and Cache=always should affect requestedCache.

Sean Hall committed Feb 18, 2021 at 10:45 UTC 837f2e309c8ef0476668c342f612dfe1bb26cb87
11 files changed +28 -90
src/engine/exeengine.cpp
+1 -23
@@ -157,25 +157,12 @@ LExit:
157 // PlanCalculate - calculates the execute and rollback state for the requested package state.
158 //
159 extern "C" HRESULT ExeEnginePlanCalculatePackage(
160 - __in BURN_PACKAGE* pPackage,
161 - __out_opt BOOL* pfBARequestedCache
160 + __in BURN_PACKAGE* pPackage
161 )
162 {
163 HRESULT hr = S_OK;
165 - //BOOL fCondition = FALSE;
166 - //BOOTSTRAPPER_PACKAGE_STATE expected = BOOTSTRAPPER_PACKAGE_STATE_UNKNOWN;
164 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE;
165 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
169 - BOOL fBARequestedCache = FALSE;
170 -
171 - //// evaluate rollback install condition
172 - //if (pPackage->sczRollbackInstallCondition)
173 - //{
174 - // hr = ConditionEvaluate(pVariables, pPackage->sczRollbackInstallCondition, &fCondition);
175 - // ExitOnFailure(hr, "Failed to evaluate rollback install condition.");
176 -
177 - // expected = fCondition ? BOOTSTRAPPER_PACKAGE_STATE_PRESENT : BOOTSTRAPPER_PACKAGE_STATE_ABSENT;
178 - //}
166
167 // execute action
168 switch (pPackage->currentState)
@@ -209,10 +196,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
196 case BOOTSTRAPPER_REQUEST_STATE_REPAIR:
197 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
198 break;
212 - case BOOTSTRAPPER_REQUEST_STATE_CACHE:
213 - execute = BOOTSTRAPPER_ACTION_STATE_NONE;
214 - fBARequestedCache = TRUE;
215 - break;
199 default:
200 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
201 break;
@@ -273,11 +256,6 @@ extern "C" HRESULT ExeEnginePlanCalculatePackage(
256 pPackage->execute = execute;
257 pPackage->rollback = rollback;
258
276 - if (pfBARequestedCache)
277 - {
278 - *pfBARequestedCache = fBARequestedCache;
279 - }
280 -
259 LExit:
260 return hr;
261 }
src/engine/exeengine.h
+1 -2
@@ -21,8 +21,7 @@ HRESULT ExeEngineDetectPackage(
21 __in BURN_VARIABLES* pVariables
22 );
23 HRESULT ExeEnginePlanCalculatePackage(
24 - __in BURN_PACKAGE* pPackage,
25 - __out_opt BOOL* pfBARequestedCache
24 + __in BURN_PACKAGE* pPackage
25 );
26 HRESULT ExeEnginePlanAddPackage(
27 __in_opt DWORD *pdwInsertSequence,
src/engine/msiengine.cpp
+1 -13
@@ -714,8 +714,7 @@ LExit:
714 //
715 extern "C" HRESULT MsiEnginePlanCalculatePackage(
716 __in BURN_PACKAGE* pPackage,
717 - __in BOOL fInsideMsiTransaction,
718 - __out_opt BOOL* pfBARequestedCache
717 + __in BOOL fInsideMsiTransaction
718 )
719 {
720 Trace(REPORT_STANDARD, "Planning MSI package 0x%p", pPackage);
@@ -728,7 +727,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
727 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
728 BOOL fFeatureActionDelta = FALSE;
729 BOOL fRollbackFeatureActionDelta = FALSE;
731 - BOOL fBARequestedCache = FALSE;
730
731 if (pPackage->Msi.cFeatures)
732 {
@@ -813,11 +811,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
811 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
812 break;
813
816 - case BOOTSTRAPPER_REQUEST_STATE_CACHE:
817 - execute = BOOTSTRAPPER_ACTION_STATE_NONE;
818 - fBARequestedCache = TRUE;
819 - break;
820 -
814 default:
815 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
816 break;
@@ -880,11 +873,6 @@ extern "C" HRESULT MsiEnginePlanCalculatePackage(
873 pPackage->execute = execute;
874 pPackage->rollback = rollback;
875
883 - if (pfBARequestedCache)
884 - {
885 - *pfBARequestedCache = fBARequestedCache;
886 - }
887 -
876 LExit:
877 return hr;
878 }
src/engine/msiengine.h
+1 -2
@@ -38,8 +38,7 @@ HRESULT MsiEnginePlanInitializePackage(
38 );
39 HRESULT MsiEnginePlanCalculatePackage(
40 __in BURN_PACKAGE* pPackage,
41 - __in BOOL fInsideMsiTransaction,
42 - __out_opt BOOL* pfBARequestedCache
41 + __in BOOL fInsideMsiTransaction
42 );
43 HRESULT MsiEnginePlanAddPackage(
44 __in BOOTSTRAPPER_DISPLAY display,
src/engine/mspengine.cpp
+1 -13
@@ -305,12 +305,10 @@ LExit:
305 //
306 extern "C" HRESULT MspEnginePlanCalculatePackage(
307 __in BURN_PACKAGE* pPackage,
308 - __in BOOL fInsideMsiTransaction,
309 - __out BOOL* pfBARequestedCache
308 + __in BOOL fInsideMsiTransaction
309 )
310 {
311 HRESULT hr = S_OK;
313 - BOOL fBARequestedCache = FALSE;
312
313 for (DWORD i = 0; i < pPackage->Msp.cTargetProductCodes; ++i)
314 {
@@ -352,11 +350,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
350 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
351 break;
352
355 - case BOOTSTRAPPER_REQUEST_STATE_CACHE:
356 - execute = BOOTSTRAPPER_ACTION_STATE_NONE;
357 - fBARequestedCache = TRUE;
358 - break;
359 -
353 default:
354 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
355 break;
@@ -419,11 +412,6 @@ extern "C" HRESULT MspEnginePlanCalculatePackage(
412 }
413 }
414
422 - if (pfBARequestedCache)
423 - {
424 - *pfBARequestedCache = fBARequestedCache;
425 - }
426 -
415 return hr;
416 }
417
src/engine/mspengine.h
+1 -2
@@ -38,8 +38,7 @@ HRESULT MspEnginePlanInitializePackage(
38 );
39 HRESULT MspEnginePlanCalculatePackage(
40 __in BURN_PACKAGE* pPackage,
41 - __in BOOL fInsideMsiTransaction,
42 - __out_opt BOOL* pfBARequestedCache
41 + __in BOOL fInsideMsiTransaction
42 );
43 HRESULT MspEnginePlanAddPackage(
44 __in BOOTSTRAPPER_DISPLAY display,
src/engine/msuengine.cpp
+1 -12
@@ -82,14 +82,12 @@ LExit:
82 // PlanCalculate - calculates the execute and rollback state for the requested package state.
83 //
84 extern "C" HRESULT MsuEnginePlanCalculatePackage(
85 - __in BURN_PACKAGE* pPackage,
86 - __out_opt BOOL* pfBARequestedCache
85 + __in BURN_PACKAGE* pPackage
86 )
87 {
88 HRESULT hr = S_OK;
89 BOOTSTRAPPER_ACTION_STATE execute = BOOTSTRAPPER_ACTION_STATE_NONE;
90 BOOTSTRAPPER_ACTION_STATE rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
92 - BOOL fBARequestedCache = FALSE;
91 BOOL fAllowUninstall = FALSE;
92
93 // We can only uninstall MSU packages if they have a KB and we are on Win7 or newer.
@@ -129,10 +127,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
127 execute = BOOTSTRAPPER_ACTION_STATE_INSTALL;
128 break;
129
132 - case BOOTSTRAPPER_REQUEST_STATE_CACHE:
133 - execute = BOOTSTRAPPER_ACTION_STATE_NONE;
134 - fBARequestedCache = TRUE;
135 -
130 default:
131 execute = BOOTSTRAPPER_ACTION_STATE_NONE;
132 break;
@@ -187,11 +181,6 @@ extern "C" HRESULT MsuEnginePlanCalculatePackage(
181 pPackage->execute = execute;
182 pPackage->rollback = rollback;
183
190 - if (pfBARequestedCache)
191 - {
192 - *pfBARequestedCache = fBARequestedCache;
193 - }
194 -
184 LExit:
185 return hr;
186 }
src/engine/msuengine.h
+1 -2
@@ -21,8 +21,7 @@ HRESULT MsuEngineDetectPackage(
21 __in BURN_VARIABLES* pVariables
22 );
23 HRESULT MsuEnginePlanCalculatePackage(
24 - __in BURN_PACKAGE* pPackage,
25 - __out_opt BOOL* pfBARequestedCache
24 + __in BURN_PACKAGE* pPackage
25 );
26 HRESULT MsuEnginePlanAddPackage(
27 __in BURN_PACKAGE* pPackage,
src/engine/package.cpp
-1
@@ -317,7 +317,6 @@ extern "C" void PackageUninitialize(
317 ReleaseStr(pPackage->sczLogPathVariable);
318 ReleaseStr(pPackage->sczRollbackLogPathVariable);
319 ReleaseStr(pPackage->sczInstallCondition);
320 - ReleaseStr(pPackage->sczRollbackInstallCondition);
320 ReleaseStr(pPackage->sczCacheId);
321
322 if (pPackage->rgDependencyProviders)
src/engine/package.h
-1
@@ -201,7 +201,6 @@ typedef struct _BURN_PACKAGE
201 LPWSTR sczRollbackLogPathVariable; // name of the variable that will be set to the rollback path.
202
203 LPWSTR sczInstallCondition;
204 - LPWSTR sczRollbackInstallCondition;
204 BOOL fPerMachine;
205 BOOL fUninstallable;
206 BOOL fVital;
src/engine/plan.cpp
+20 -19
@@ -166,11 +166,11 @@ static HRESULT PlanDependencyActions(
166 );
167 static HRESULT CalculateExecuteActions(
168 __in BURN_PACKAGE* pPackage,
169 - __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary,
170 - __out_opt BOOL* pfBARequestedCache
169 + __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
170 );
171 static BOOL NeedsCache(
173 - __in BURN_PACKAGE* pPackage
172 + __in BURN_PACKAGE* pPackage,
173 + __in BOOL fExecute
174 );
175 static HRESULT CreateContainerProgress(
176 __in BURN_PLAN* pPlan,
@@ -1081,24 +1081,24 @@ extern "C" HRESULT PlanExecutePackage(
1081 )
1082 {
1083 HRESULT hr = S_OK;
1084 - BOOL fBARequestedCache = FALSE;
1084 + BOOL fRequestedCache = BOOTSTRAPPER_REQUEST_STATE_CACHE == pPackage->requested ||
1085 + BOOTSTRAPPER_REQUEST_STATE_ABSENT < pPackage->requested && BURN_CACHE_TYPE_ALWAYS == pPackage->cacheType;
1086
1086 - hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary, &fBARequestedCache);
1087 + hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary);
1088 ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId);
1089
1090 // Calculate package states based on reference count and plan certain dependency actions prior to planning the package execute action.
1091 hr = DependencyPlanPackageBegin(fPerMachine, pPackage, pPlan);
1092 ExitOnFailure(hr, "Failed to begin plan dependency actions for package: %ls", pPackage->sczId);
1093
1093 - if (fBARequestedCache || NeedsCache(pPackage))
1094 + if (fRequestedCache || NeedsCache(pPackage, TRUE))
1095 {
1096 hr = AddCachePackage(pPlan, pPackage, phSyncpointEvent);
1097 ExitOnFailure(hr, "Failed to plan cache package.");
1098 }
1098 - else if (BURN_CACHE_STATE_COMPLETE != pPackage->cache && // if the package is not in the cache, disable any rollback that would require the package from the cache.
1099 - (BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->rollback || (BURN_PACKAGE_TYPE_EXE == pPackage->type && BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->rollback))
1100 - )
1099 + else if (BURN_CACHE_STATE_COMPLETE != pPackage->cache && NeedsCache(pPackage, FALSE))
1100 {
1101 + // If the package is not in the cache, disable any rollback that would require the package from the cache.
1102 LogId(REPORT_STANDARD, MSG_PLAN_DISABLING_ROLLBACK_NO_CACHE, pPackage->sczId, LoggingCacheStateToString(pPackage->cache), LoggingActionStateToString(pPackage->rollback));
1103 pPackage->rollback = BOOTSTRAPPER_ACTION_STATE_NONE;
1104 }
@@ -1431,7 +1431,7 @@ extern "C" HRESULT PlanRelatedBundlesComplete(
1431
1432 if (BOOTSTRAPPER_REQUEST_STATE_NONE != pRelatedBundle->package.requested)
1433 {
1434 - hr = ExeEnginePlanCalculatePackage(&pRelatedBundle->package, NULL);
1434 + hr = ExeEnginePlanCalculatePackage(&pRelatedBundle->package);
1435 ExitOnFailure(hr, "Failed to calcuate plan for related bundle: %ls", pRelatedBundle->package.sczId);
1436
1437 // Calculate package states based on reference count for addon and patch related bundles.
@@ -2819,8 +2819,7 @@ LExit:
2819
2820 static HRESULT CalculateExecuteActions(
2821 __in BURN_PACKAGE* pPackage,
2822 - __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary,
2823 - __out_opt BOOL* pfBARequestedCache
2822 + __in_opt BURN_ROLLBACK_BOUNDARY* pActiveRollbackBoundary
2823 )
2824 {
2825 HRESULT hr = S_OK;
@@ -2830,19 +2829,19 @@ static HRESULT CalculateExecuteActions(
2829 switch (pPackage->type)
2830 {
2831 case BURN_PACKAGE_TYPE_EXE:
2833 - hr = ExeEnginePlanCalculatePackage(pPackage, pfBARequestedCache);
2832 + hr = ExeEnginePlanCalculatePackage(pPackage);
2833 break;
2834
2835 case BURN_PACKAGE_TYPE_MSI:
2837 - hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache);
2836 + hr = MsiEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2837 break;
2838
2839 case BURN_PACKAGE_TYPE_MSP:
2841 - hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction, pfBARequestedCache);
2840 + hr = MspEnginePlanCalculatePackage(pPackage, fInsideMsiTransaction);
2841 break;
2842
2843 case BURN_PACKAGE_TYPE_MSU:
2845 - hr = MsuEnginePlanCalculatePackage(pPackage, pfBARequestedCache);
2844 + hr = MsuEnginePlanCalculatePackage(pPackage);
2845 break;
2846
2847 default:
@@ -2855,16 +2854,18 @@ LExit:
2854 }
2855
2856 static BOOL NeedsCache(
2858 - __in BURN_PACKAGE* pPackage
2857 + __in BURN_PACKAGE* pPackage,
2858 + __in BOOL fExecute
2859 )
2860 {
2861 + BOOTSTRAPPER_ACTION_STATE action = fExecute ? pPackage->execute : pPackage->rollback;
2862 if (BURN_PACKAGE_TYPE_EXE == pPackage->type) // Exe packages require the package for all operations (even uninstall).
2863 {
2863 - return BOOTSTRAPPER_ACTION_STATE_NONE != pPackage->execute;
2864 + return BOOTSTRAPPER_ACTION_STATE_NONE != action;
2865 }
2866 else // The other package types can uninstall without the original package.
2867 {
2867 - return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < pPackage->execute;
2868 + return BOOTSTRAPPER_ACTION_STATE_UNINSTALL < action;
2869 }
2870 }
2871