Major upgrades and launch conditions #13

Closed
opened 2026-10-14 01:26:56 -05:00 by jeff · 1 comment
Owner

Parent

Part of #1

What to build

MajorUpgrade (with its DowngradeErrorMessage and Schedule attributes) makes a newer version replace an older one, and a launch Condition refuses to install where its expression is false, showing its message.

Acceptance criteria

  • Seam 1 tests assert the Upgrade, LaunchCondition and sequence table rows MajorUpgrade and Condition produce.
  • VM test: under Wine, installing version 2 of a fixture over version 1 leaves only version 2 installed, and its files.
  • VM test: installing version 1 over version 2 fails with the downgrade message.
  • VM test: a fixture whose launch condition is false fails to install.
  • VM test: the tables match the reference implementation's with generated columns masked.
## Parent Part of #1 ## What to build `MajorUpgrade` (with its `DowngradeErrorMessage` and `Schedule` attributes) makes a newer version replace an older one, and a launch `Condition` refuses to install where its expression is false, showing its message. ## Acceptance criteria - [ ] Seam 1 tests assert the `Upgrade`, `LaunchCondition` and sequence table rows `MajorUpgrade` and `Condition` produce. - [ ] VM test: under Wine, installing version 2 of a fixture over version 1 leaves only version 2 installed, and its files. - [ ] VM test: installing version 1 over version 2 fails with the downgrade message. - [ ] VM test: a fixture whose launch condition is false fails to install. - [ ] VM test: the tables match the reference implementation's with generated columns masked.
jeff self-assigned this 2026-10-14 04:57:31 -05:00
Author
Owner

Done in 5be1cd1; CI run 10 is green.

  • MajorUpgrade:
    • fills the Upgrade table as WiX documents it, covering every attribute except the two Schedule values zixl can't yet place, which are refused by name;
    • turns DowngradeErrorMessage and DisallowUpgradeErrorMessage into launch conditions;
    • adds WIX_UPGRADE_DETECTED and WIX_DOWNGRADE_DETECTED to SecureCustomProperties;
    • sequences FindRelatedProducts, MigrateFeatureStates and RemoveExistingProducts.
  • Condition: under a Product or Fragment it's a launch condition; under a Feature it's a Condition table row.
  • Seam 1: the default rows, every option, Disallow, what WiX requires of the attributes together, and both kinds of condition (CDATA included).
  • End to end: the upgrade fixture's tables match wixl's. tests/e2e/upgrade.sh, under Wine on x86 and x64, checks three things:
    • version 2 over version 1 leaves only version 2;
    • version 1 over version 2 is refused and leaves version 2 installed;
    • a package whose launch condition is false doesn't install.
  • Not checked under Wine: the downgrade message. Wine logs no launch condition's message in quiet mode, so the message is checked in the LaunchCondition table instead.
Done in 5be1cd1; CI run 10 is green. - **`MajorUpgrade`:** - fills the Upgrade table as WiX documents it, covering every attribute except the two `Schedule` values zixl can't yet place, which are refused by name; - turns `DowngradeErrorMessage` and `DisallowUpgradeErrorMessage` into launch conditions; - adds `WIX_UPGRADE_DETECTED` and `WIX_DOWNGRADE_DETECTED` to `SecureCustomProperties`; - sequences `FindRelatedProducts`, `MigrateFeatureStates` and `RemoveExistingProducts`. - **`Condition`:** under a `Product` or `Fragment` it's a launch condition; under a `Feature` it's a Condition table row. - **Seam 1:** the default rows, every option, `Disallow`, what WiX requires of the attributes together, and both kinds of condition (CDATA included). - **End to end:** the `upgrade` fixture's tables match wixl's. `tests/e2e/upgrade.sh`, under Wine on x86 and x64, checks three things: - version 2 over version 1 leaves only version 2; - version 1 over version 2 is refused and leaves version 2 installed; - a package whose launch condition is false doesn't install. - **Not checked under Wine:** the downgrade message. Wine logs no launch condition's message in quiet mode, so the message is checked in the LaunchCondition table instead.
jeff closed this issue 2026-10-14 05:36:13 -05:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
jeff/zixl#13
No description provided.