diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2023-07-07 14:24:52 +0200 |
|---|---|---|
| committer | Julian Andres Klode <julian.klode@canonical.com> | 2023-07-07 14:28:59 +0200 |
| commit | 68ef41ea912f4879b0ee43419c13a3a8c9bfcd22 (patch) | |
| tree | 87e0c3dd974b9003f8320db0fea93ce82c47f149 /test | |
| parent | 89dd48bdea93849246fc33b447d6d7ad52bb1c4b (diff) | |
Do not mark updates for install that are still phasing
This fixes an issue where phased updates gain new dependencies
and cause them to be installed despite themselves not being
installed.
In the cause of investigation, it turned out that we also need
to evaluate the candidate version at those early stage rather
than the install version (which is only valid *after* MarkInstall).
This does not fully resolve the problem: If an update pulls in
a phased update, depends are still being installed. Resolving
this while ensuring that phased updates cannot uninstall packages
requires us to do a minimization of changes by trying to keep
back each new install removal and then seeing if any dependency
is being broken by it. This is more complex and will happen
later.
Diffstat (limited to 'test')
| -rwxr-xr-x | test/integration/test-phased-updates-new-depends | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/test/integration/test-phased-updates-new-depends b/test/integration/test-phased-updates-new-depends new file mode 100755 index 000000000..8cc9314ad --- /dev/null +++ b/test/integration/test-phased-updates-new-depends @@ -0,0 +1,96 @@ +#!/bin/sh +set -e + +TESTDIR="$(readlink -f "$(dirname "$0")")" +. "$TESTDIR/framework" + +setupenvironment +echo 'Debug::Phasing "1";' > rootdir/etc/apt/apt.conf.d/debug-phasing +configarchitecture 'i386' + +insertinstalledpackage 'has-new-depends' 'all' '1' '' +insertinstalledpackage 'has-new-recommends' 'all' '1' '' +insertinstalledpackage 'has-new-conflicts' 'all' '1' '' +insertinstalledpackage 'new-conflicts' 'all' '1' '' + +insertpackage 'unstable-updates' 'new-depends' 'all' '2' +insertpackage 'unstable-updates' 'new-recommends' 'all' '2' +insertpackage 'unstable-updates' 'has-new-depends' 'all' '2' 'Phased-Update-Percentage: 0 +Depends: new-depends' +insertpackage 'unstable-updates' 'has-new-recommends' 'all' '2' 'Phased-Update-Percentage: 0 +Recommends: new-recommends' +insertpackage 'unstable-updates' 'has-new-conflicts' 'all' '2' 'Phased-Update-Percentage: 0 +Conflicts: new-conflicts' + +setupaptarchive + + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + has-new-conflicts has-new-depends has-new-recommends +0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded." aptget upgrade -s -q -o APT::Get::Always-Include-Phased-Updates=1 + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + has-new-conflicts has-new-depends has-new-recommends +0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded." aptget upgrade -s -q + + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following NEW packages will be installed: + new-depends new-recommends +The following packages have been kept back: + has-new-conflicts +The following packages will be upgraded: + has-new-depends has-new-recommends +2 upgraded, 2 newly installed, 0 to remove and 1 not upgraded. +Inst new-depends (2 unstable-updates [all]) +Inst has-new-depends [1] (2 unstable-updates [all]) +Inst has-new-recommends [1] (2 unstable-updates [all]) +Inst new-recommends (2 unstable-updates [all]) +Conf new-depends (2 unstable-updates [all]) +Conf has-new-depends (2 unstable-updates [all]) +Conf has-new-recommends (2 unstable-updates [all]) +Conf new-recommends (2 unstable-updates [all])" aptget upgrade -s -q --with-new-pkgs -o APT::Get::Always-Include-Phased-Updates=1 + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + has-new-conflicts has-new-depends has-new-recommends +0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded." aptget upgrade -s -q --with-new-pkgs + +: testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages will be REMOVED: + new-conflicts +The following NEW packages will be installed: + new-depends new-recommends +The following packages will be upgraded: + has-new-conflicts has-new-depends has-new-recommends +3 upgraded, 2 newly installed, 1 to remove and 0 not upgraded. +Remv new-conflicts [1] +Inst has-new-conflicts [1] (2 unstable-updates [all]) +Inst new-depends (2 unstable-updates [all]) +Inst has-new-depends [1] (2 unstable-updates [all]) +Inst has-new-recommends [1] (2 unstable-updates [all]) +Inst new-recommends (2 unstable-updates [all]) +Conf has-new-conflicts (2 unstable-updates [all]) +Conf new-depends (2 unstable-updates [all]) +Conf has-new-depends (2 unstable-updates [all]) +Conf has-new-recommends (2 unstable-updates [all]) +Conf new-recommends (2 unstable-updates [all])" aptget dist-upgrade -s -q -o APT::Get::Always-Include-Phased-Updates=1 + +testsuccessequal "Reading package lists... +Building dependency tree... +Calculating upgrade... +The following packages have been kept back: + has-new-conflicts has-new-depends has-new-recommends +0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded." aptget dist-upgrade -s -q |
