BOOTSTRAPPER_ACTION_CACHE
User stories
- As a Setup Developer I can write a BA to request a new action,
BOOTSTRAPPER_ACTION_CACHE
, such that the engine will set the default action of each package in order to get each package in the package cache.
Background
Burn shipped in v3.6 with 7 BOOTSTRAPPER_ACTION
types:
enum BOOTSTRAPPER_ACTION
{
BOOTSTRAPPER_ACTION_UNKNOWN,
BOOTSTRAPPER_ACTION_HELP,
BOOTSTRAPPER_ACTION_LAYOUT,
BOOTSTRAPPER_ACTION_UNINSTALL,
BOOTSTRAPPER_ACTION_INSTALL,
BOOTSTRAPPER_ACTION_MODIFY,
BOOTSTRAPPER_ACTION_REPAIR,
};
and 6 BOOTSTRAPPER_REQUEST_STATE
types:
enum BOOTSTRAPPER_REQUEST_STATE
{
BOOTSTRAPPER_REQUEST_STATE_NONE,
BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT,
BOOTSTRAPPER_REQUEST_STATE_ABSENT,
BOOTSTRAPPER_REQUEST_STATE_CACHE,
BOOTSTRAPPER_REQUEST_STATE_PRESENT,
BOOTSTRAPPER_REQUEST_STATE_REPAIR,
};
The basic idea was for the following mapping between BOOTSTRAPPER_ACTION
and BOOTSTRAPPER_REQUEST_STATE
for each package:
BOOTSTRAPPER_ACTION_UNINSTALL -> BOOTSTRAPPER_REQUEST_STATE_ABSENT
BOOTSTRAPPER_ACTION_CACHE -> BOOTSTRAPPER_REQUEST_STATE_CACHE
BOOTSTRAPPER_ACTION_INSTALL -> BOOTSTRAPPER_REQUEST_STATE_PRESENT
BOOTSTRAPPER_ACTION_REPAIR -> BOOTSTRAPPER_REQUEST_STATE_REPAIR
There were two problems with this.
A big problem was that BOOTSTRAPPER_ACTION_CACHE
didn't exist.
The other problem was that BOOTSTRAPPER_REQUEST_STATE_CACHE
wasn't fully implemented.
Bug 4393 dealt with implementing BOOTSTRAPPER_REQUEST_STATE_CACHE
.
When the package is not installed and the requested state is BOOTSTRAPPER_REQUEST_STATE_CACHE
, the engine should cache the package (execute action: None and cache: Yes).
When the package is installed, the package should be uninstalled and the package should stay in the cache (execute: Uninstall and uncache: No).
MsiPackage
and MspPackage
implemented the uninstall behavior, but otherwise BOOTSTRAPPER_REQUEST_STATE_CACHE
didn't do anything.
Proposal
BOOTSTRAPPER_ACTION_CACHE
should work similarly to BOOTSTRAPPER_ACTION_INSTALL
and BOOTSTRAPPER_ACTION_MODIFY
: the engine should first evaluate the package's InstallCondition
.
If it is false, then the default request state should be BOOTSTRAPPER_REQUEST_STATE_ABSENT
.
If it is true, and Cache
is 'yes', then the default request state depends on the current state of the package.
The default request state should be BOOTSTRAPPER_REQUEST_STATE_CACHE
if the state is BOOTSTRAPPER_PACKAGE_STATE_ABSENT
.
Otherwise, it should be BOOTSTRAPPER_REQUEST_STATE_NONE
.
BOOTSTRAPPER_ACTION_CACHE
should be placed between uninstall and install:
enum BOOTSTRAPPER_ACTION
{
BOOTSTRAPPER_ACTION_UNKNOWN,
BOOTSTRAPPER_ACTION_HELP,
BOOTSTRAPPER_ACTION_LAYOUT,
BOOTSTRAPPER_ACTION_UNINSTALL,
BOOTSTRAPPER_ACTION_CACHE,
BOOTSTRAPPER_ACTION_INSTALL,
BOOTSTRAPPER_ACTION_MODIFY,
BOOTSTRAPPER_ACTION_REPAIR,
};
Considerations
There are some conditions in the engine that are:
BOOTSTRAPPER_ACTION_INSTALL <= action
These need to be converted to:
BOOTSTRAPPER_ACTION_UNINSTALL < action