diff options
Diffstat (limited to 'src/burn')
| -rw-r--r-- | src/burn/engine/core.cpp | 2 | ||||
| -rw-r--r-- | src/burn/engine/engine.mc | 2 | ||||
| -rw-r--r-- | src/burn/engine/logging.cpp | 17 | ||||
| -rw-r--r-- | src/burn/engine/logging.h | 4 | ||||
| -rw-r--r-- | src/burn/engine/plan.cpp | 17 | ||||
| -rw-r--r-- | src/burn/engine/userexperience.cpp | 6 | ||||
| -rw-r--r-- | src/burn/test/BurnUnitTest/PlanTest.cpp | 25 |
7 files changed, 59 insertions, 14 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 | |||
| 314 | Severity=Success | 314 | Severity=Success |
| 315 | SymbolicName=MSG_PLANNED_PACKAGE | 315 | SymbolicName=MSG_PLANNED_PACKAGE |
| 316 | Language=English | 316 | Language=English |
| 317 | Planned 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! | 317 | Planned 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 | ||
| 320 | MessageId=202 | 320 | MessageId=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 | ||
| 340 | extern "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 | |||
| 340 | extern "C" LPCSTR LoggingDependencyActionToString( | 357 | extern "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 | ||
| 76 | LPCSTR LoggingCacheTypeToString( | ||
| 77 | BOOTSTRAPPER_CACHE_TYPE cacheType | ||
| 78 | ); | ||
| 79 | |||
| 76 | LPCSTR LoggingDependencyActionToString( | 80 | LPCSTR 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 | ||
| 2538 | static void CacheActionLog( | 2549 | static 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 | ||
| 2003 | LExit: | 2007 | LExit: |
| 2004 | return hr; | 2008 | return hr; |
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index 045c510e..23192349 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp | |||
| @@ -726,27 +726,33 @@ namespace Bootstrapper | |||
| 726 | BOOL fRollback = FALSE; | 726 | BOOL fRollback = FALSE; |
| 727 | DWORD dwIndex = 0; | 727 | DWORD dwIndex = 0; |
| 728 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 728 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 729 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); | ||
| 730 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | ||
| 731 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 3); | ||
| 729 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PatchA"); | 732 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PatchA"); |
| 730 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 733 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| 731 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 2); | 734 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 4); |
| 732 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 735 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 733 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); | 736 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++); |
| 734 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 737 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 735 | 738 | ||
| 736 | fRollback = TRUE; | 739 | fRollback = TRUE; |
| 737 | dwIndex = 0; | 740 | dwIndex = 0; |
| 738 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 2); | 741 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 4); |
| 739 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | 742 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); |
| 740 | 743 | ||
| 741 | Assert::Equal(3055111ull, pPlan->qwEstimatedSize); | 744 | Assert::Equal(3055111ull, pPlan->qwEstimatedSize); |
| 742 | Assert::Equal(212992ull, pPlan->qwCacheSizeTotal); | 745 | Assert::Equal(6130592ull, pPlan->qwCacheSizeTotal); |
| 743 | 746 | ||
| 744 | fRollback = FALSE; | 747 | fRollback = FALSE; |
| 745 | dwIndex = 0; | 748 | dwIndex = 0; |
| 746 | DWORD dwExecuteCheckpointId = 3; | 749 | DWORD dwExecuteCheckpointId = 2; |
| 747 | BURN_EXECUTE_ACTION* pExecuteAction = NULL; | 750 | BURN_EXECUTE_ACTION* pExecuteAction = NULL; |
| 748 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | 751 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); |
| 749 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[5].syncpoint.hEvent); | 752 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[2].syncpoint.hEvent); |
| 753 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 754 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[8].syncpoint.hEvent); | ||
| 755 | dwExecuteCheckpointId += 2; // cache checkpoints | ||
| 750 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 756 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 751 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 757 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 752 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); | 758 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); |
| @@ -755,7 +761,7 @@ namespace Bootstrapper | |||
| 755 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 761 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 756 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); | 762 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); |
| 757 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 763 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 758 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[2].syncpoint.hEvent); | 764 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[5].syncpoint.hEvent); |
| 759 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 765 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 760 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 766 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 761 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); | 767 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); |
| @@ -769,8 +775,11 @@ namespace Bootstrapper | |||
| 769 | 775 | ||
| 770 | fRollback = TRUE; | 776 | fRollback = TRUE; |
| 771 | dwIndex = 0; | 777 | dwIndex = 0; |
| 772 | dwExecuteCheckpointId = 3; | 778 | dwExecuteCheckpointId = 2; |
| 773 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | 779 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); |
| 780 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); | ||
| 781 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 782 | dwExecuteCheckpointId += 2; // cache checkpoints | ||
| 774 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | 783 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 775 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | 784 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); |
| 776 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); | 785 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); |
| @@ -793,7 +802,7 @@ namespace Bootstrapper | |||
| 793 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | 802 | Assert::Equal(dwIndex, pPlan->cRollbackActions); |
| 794 | 803 | ||
| 795 | Assert::Equal(2ul, pPlan->cExecutePackagesTotal); | 804 | Assert::Equal(2ul, pPlan->cExecutePackagesTotal); |
| 796 | Assert::Equal(4ul, pPlan->cOverallProgressTicksTotal); | 805 | Assert::Equal(5ul, pPlan->cOverallProgressTicksTotal); |
| 797 | 806 | ||
| 798 | dwIndex = 0; | 807 | dwIndex = 0; |
| 799 | Assert::Equal(dwIndex, pPlan->cCleanActions); | 808 | Assert::Equal(dwIndex, pPlan->cCleanActions); |
