summaryrefslogtreecommitdiff
path: root/src/burn/engine
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-05-03 21:14:52 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-05-11 19:11:19 -0500
commita2f2036c8598efcb434eebeeacd7ede84ab60dfe (patch)
tree271e07336a3eb394f5f9fe4c2da0973d2b3193dc /src/burn/engine
parent2f4287fdcee83b30e0f7f3ce548bcdff2ee85e1f (diff)
downloadwix-a2f2036c8598efcb434eebeeacd7ede84ab60dfe.tar.gz
wix-a2f2036c8598efcb434eebeeacd7ede84ab60dfe.tar.bz2
wix-a2f2036c8598efcb434eebeeacd7ede84ab60dfe.zip
Cache packages that will be present for CACHE/INSTALL overall actions.
During actions that are expected to have source media available, all packages that have cacheType set to keep should be cached if the package is going to be present. Set NetFx ExePackage Cache="no" and remove uninstall and repair arguments. #5125
Diffstat (limited to 'src/burn/engine')
-rw-r--r--src/burn/engine/core.cpp2
-rw-r--r--src/burn/engine/engine.mc2
-rw-r--r--src/burn/engine/logging.cpp17
-rw-r--r--src/burn/engine/logging.h4
-rw-r--r--src/burn/engine/plan.cpp17
-rw-r--r--src/burn/engine/userexperience.cpp6
6 files changed, 42 insertions, 6 deletions
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp
index 02cab7e6..601f29a0 100644
--- a/src/burn/engine/core.cpp
+++ b/src/burn/engine/core.cpp
@@ -1788,7 +1788,7 @@ static void LogPackages(
1788 const DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == action) ? pPackages->cPackages - 1 - i : i; 1788 const DWORD iPackage = (BOOTSTRAPPER_ACTION_UNINSTALL == action) ? pPackages->cPackages - 1 - i : i;
1789 const BURN_PACKAGE* pPackage = &pPackages->rgPackages[iPackage]; 1789 const BURN_PACKAGE* pPackage = &pPackages->rgPackages[iPackage];
1790 1790
1791 LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingBoolToString(pPackage->fPlannedCache), LoggingBoolToString(pPackage->fPlannedUncache), LoggingDependencyActionToString(pPackage->dependencyExecute), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedInstallRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedCacheRegistrationState)); 1791 LogId(REPORT_STANDARD, MSG_PLANNED_PACKAGE, pPackage->sczId, LoggingPackageStateToString(pPackage->currentState), LoggingRequestStateToString(pPackage->defaultRequested), LoggingRequestStateToString(pPackage->requested), LoggingActionStateToString(pPackage->execute), LoggingActionStateToString(pPackage->rollback), LoggingCacheTypeToString(pPackage->authoredCacheType), LoggingCacheTypeToString(pPackage->cacheType), LoggingBoolToString(pPackage->fPlannedCache), LoggingBoolToString(pPackage->fPlannedUncache), LoggingDependencyActionToString(pPackage->dependencyExecute), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedInstallRegistrationState), LoggingPackageRegistrationStateToString(pPackage->fCanAffectRegistration, pPackage->expectedCacheRegistrationState));
1792 1792
1793 if (BURN_PACKAGE_TYPE_MSI == pPackage->type) 1793 if (BURN_PACKAGE_TYPE_MSI == pPackage->type)
1794 { 1794 {
diff --git a/src/burn/engine/engine.mc b/src/burn/engine/engine.mc
index 84046314..929bf67a 100644
--- a/src/burn/engine/engine.mc
+++ b/src/burn/engine/engine.mc
@@ -314,7 +314,7 @@ MessageId=201
314Severity=Success 314Severity=Success
315SymbolicName=MSG_PLANNED_PACKAGE 315SymbolicName=MSG_PLANNED_PACKAGE
316Language=English 316Language=English
317Planned package: %1!ls!, state: %2!hs!, default requested: %3!hs!, ba requested: %4!hs!, execute: %5!hs!, rollback: %6!hs!, cache: %7!hs!, uncache: %8!hs!, dependency: %9!hs!, expected install registration state: %10!hs!, expected cache registration state: %11!hs! 317Planned package: %1!ls!, state: %2!hs!, default requested: %3!hs!, ba requested: %4!hs!, execute: %5!hs!, rollback: %6!hs!, default cache strategy: %7!hs!, ba requested strategy: %8!hs!, cache: %9!hs!, uncache: %10!hs!, dependency: %11!hs!, expected install registration state: %12!hs!, expected cache registration state: %13!hs!
318. 318.
319 319
320MessageId=202 320MessageId=202
diff --git a/src/burn/engine/logging.cpp b/src/burn/engine/logging.cpp
index 065ef907..7ee1ec85 100644
--- a/src/burn/engine/logging.cpp
+++ b/src/burn/engine/logging.cpp
@@ -337,6 +337,23 @@ extern "C" LPCSTR LoggingActionStateToString(
337 } 337 }
338} 338}
339 339
340extern "C" LPCSTR LoggingCacheTypeToString(
341 BOOTSTRAPPER_CACHE_TYPE cacheType
342 )
343{
344 switch (cacheType)
345 {
346 case BOOTSTRAPPER_CACHE_TYPE_FORCE:
347 return "Force";
348 case BOOTSTRAPPER_CACHE_TYPE_KEEP:
349 return "Keep";
350 case BOOTSTRAPPER_CACHE_TYPE_REMOVE:
351 return "Remove";
352 default:
353 return "Invalid";
354 }
355}
356
340extern "C" LPCSTR LoggingDependencyActionToString( 357extern "C" LPCSTR LoggingDependencyActionToString(
341 BURN_DEPENDENCY_ACTION action 358 BURN_DEPENDENCY_ACTION action
342 ) 359 )
diff --git a/src/burn/engine/logging.h b/src/burn/engine/logging.h
index 601039f9..909ce591 100644
--- a/src/burn/engine/logging.h
+++ b/src/burn/engine/logging.h
@@ -73,6 +73,10 @@ LPCSTR LoggingActionStateToString(
73 __in BOOTSTRAPPER_ACTION_STATE actionState 73 __in BOOTSTRAPPER_ACTION_STATE actionState
74 ); 74 );
75 75
76LPCSTR LoggingCacheTypeToString(
77 BOOTSTRAPPER_CACHE_TYPE cacheType
78 );
79
76LPCSTR LoggingDependencyActionToString( 80LPCSTR LoggingDependencyActionToString(
77 BURN_DEPENDENCY_ACTION action 81 BURN_DEPENDENCY_ACTION action
78 ); 82 );
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index 327078b9..f0ae2a44 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -1077,7 +1077,7 @@ extern "C" HRESULT PlanExecutePackage(
1077 ) 1077 )
1078{ 1078{
1079 HRESULT hr = S_OK; 1079 HRESULT hr = S_OK;
1080 BOOL fRequestedCache = BOOTSTRAPPER_REQUEST_STATE_CACHE == pPackage->requested || ForceCache(pPlan, pPackage); 1080 BOOL fRequestedCache = BOOTSTRAPPER_CACHE_TYPE_REMOVE < pPackage->cacheType && (BOOTSTRAPPER_REQUEST_STATE_CACHE == pPackage->requested || ForceCache(pPlan, pPackage));
1081 1081
1082 hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary); 1082 hr = CalculateExecuteActions(pPackage, pPlan->pActiveRollbackBoundary);
1083 ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId); 1083 ExitOnFailure(hr, "Failed to calculate plan actions for package: %ls", pPackage->sczId);
@@ -2531,8 +2531,19 @@ static BOOL ForceCache(
2531 __in BURN_PACKAGE* pPackage 2531 __in BURN_PACKAGE* pPackage
2532 ) 2532 )
2533{ 2533{
2534 // All packages that have cacheType set to force should be cached if the bundle is going to be present. 2534 switch (pPackage->cacheType)
2535 return BOOTSTRAPPER_CACHE_TYPE_FORCE == pPackage->cacheType && BOOTSTRAPPER_ACTION_UNINSTALL < pPlan->action; 2535 {
2536 case BOOTSTRAPPER_CACHE_TYPE_KEEP:
2537 // During actions that are expected to have source media available,
2538 // all packages that have cacheType set to keep should be cached if the package is going to be present.
2539 return (BOOTSTRAPPER_ACTION_CACHE == pPlan->action || BOOTSTRAPPER_ACTION_INSTALL == pPlan->action) &&
2540 BOOTSTRAPPER_REQUEST_STATE_CACHE < pPackage->requested;
2541 case BOOTSTRAPPER_CACHE_TYPE_FORCE:
2542 // All packages that have cacheType set to force should be cached if the bundle is going to be present.
2543 return BOOTSTRAPPER_ACTION_UNINSTALL < pPlan->action;
2544 default:
2545 return FALSE;
2546 }
2536} 2547}
2537 2548
2538static void CacheActionLog( 2549static void CacheActionLog(
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp
index 2215a070..5a54f26e 100644
--- a/src/burn/engine/userexperience.cpp
+++ b/src/burn/engine/userexperience.cpp
@@ -1998,7 +1998,11 @@ EXTERN_C BAAPI UserExperienceOnPlanPackageBegin(
1998 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); 1998 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
1999 } 1999 }
2000 *pRequestedState = results.requestedState; 2000 *pRequestedState = results.requestedState;
2001 *pRequestedCacheType = results.requestedCacheType; 2001
2002 if (BOOTSTRAPPER_CACHE_TYPE_REMOVE <= results.requestedCacheType && BOOTSTRAPPER_CACHE_TYPE_FORCE >= results.requestedCacheType)
2003 {
2004 *pRequestedCacheType = results.requestedCacheType;
2005 }
2002 2006
2003LExit: 2007LExit:
2004 return hr; 2008 return hr;