From 446551c8ffd2c9cb9dcd707c94590e73009f7dd9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Thu, 6 Feb 2014 00:13:10 +0100 Subject: discard impossible candidates in MarkInstall If a (Pre-)Depends can't be satisfied there is no point in keeping the candidate as is as it is impossible to find a solution for it, so we can just as well reset the candidate to the currently installed version. We avoid trying to install this impossible candidate later on this way. Closes: #735967 --- .../test-bug-735967-lib32-to-i386-unavailable | 86 ++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100755 test/integration/test-bug-735967-lib32-to-i386-unavailable (limited to 'test/integration/test-bug-735967-lib32-to-i386-unavailable') diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable new file mode 100755 index 000000000..4dbe1d25d --- /dev/null +++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable @@ -0,0 +1,86 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework + +setupenvironment +configarchitecture 'i386' 'amd64' + +insertpackage 'unstable' 'lib32nss-mdns' 'amd64' '0.10-6' 'Depends: libnss-mdns-i386 (= 0.10-6)' +insertpackage 'unstable' 'libnss-mdns' 'amd64,i386' '0.10-6' 'Multi-Arch: same +Breaks: lib32nss-mdns (<< 0.10-6)' +insertpackage 'unstable' 'libnss-mdns-i386' 'i386' '0.10-6' 'Multi-Arch: foreign +Depends: libnss-mdns' + +insertpackage 'unstable' 'foo' 'amd64' '1' 'Depends: libfoo' +insertpackage 'unstable' 'libfoo' 'amd64' '1' 'Depends: libfoo-bin' +insertpackage 'unstable' 'libfoo-bin' 'i386' '0.10-6' 'Multi-Arch: foreign' + +insertinstalledpackage 'lib32nss-mdns' 'amd64' '0.9-1' +insertinstalledpackage 'libnss-mdns' 'amd64' '0.9-1' + +insertinstalledpackage 'i-make-packages-important' 'all' '1' 'Depends: libnss-mdns' + +setupaptarchive --no-update + +# make libnss-mdns-i386 unavailable +configarchitecture 'amd64' +testsuccess aptget update + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + lib32nss-mdns +The following packages will be upgraded: + libnss-mdns +1 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. +Remv lib32nss-mdns [0.9-1] +Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) +Conf libnss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s + +testequal 'Reading package lists... +Building dependency tree... +Some packages could not be installed. This may mean that you have +requested an impossible situation or if you are using the unstable +distribution that some required packages have not yet been created +or been moved out of Incoming. +The following information may help to resolve the situation: + +The following packages have unmet dependencies: + foo : Depends: libfoo but it is not going to be installed +E: Unable to correct problems, you have held broken packages.' aptget install foo -s + +# activate multiarch +configarchitecture 'amd64' 'i386' +testsuccess aptget update + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + libnss-mdns:i386 libnss-mdns-i386:i386 +The following packages will be upgraded: + lib32nss-mdns libnss-mdns +2 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst lib32nss-mdns [0.9-1] (0.10-6 unstable [amd64]) [] +Inst libnss-mdns [0.9-1] (0.10-6 unstable [amd64]) [] +Inst libnss-mdns:i386 (0.10-6 unstable [i386]) [] +Inst libnss-mdns-i386:i386 (0.10-6 unstable [i386]) +Conf libnss-mdns:i386 (0.10-6 unstable [i386]) +Conf libnss-mdns (0.10-6 unstable [amd64]) +Conf libnss-mdns-i386:i386 (0.10-6 unstable [i386]) +Conf lib32nss-mdns (0.10-6 unstable [amd64])' aptget dist-upgrade -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libfoo libfoo-bin:i386 +The following NEW packages will be installed: + foo libfoo libfoo-bin:i386 +0 upgraded, 3 newly installed, 0 to remove and 2 not upgraded. +Inst libfoo-bin:i386 (0.10-6 unstable [i386]) +Inst libfoo (1 unstable [amd64]) +Inst foo (1 unstable [amd64]) +Conf libfoo-bin:i386 (0.10-6 unstable [i386]) +Conf libfoo (1 unstable [amd64]) +Conf foo (1 unstable [amd64])' aptget install foo -s -- cgit v1.2.3 From 21b3eac8f9ab8e12b43fa8998a5aa5465f29adc5 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 11 Mar 2014 10:31:44 +0100 Subject: discard candidates via IsInstallOk to allow override In commit 446551c8 I changed MarkInstall to discard the candidate if the candidate can't satisfy the dependency. This breaks interactive solvers like aptitude which can change the candidate on-the-fly later. In commit df77d8a5 I introduced this 'early' loop-breaking to begin with which can't be that helpful for interactive solvers as well, but makes perfect sense for non-interactives to stop them from exploring trees which can't be satisfied, but it isn't perfect as ideally we would check this before auto-installing the first dependency. This commit therefore moves the loop into its own IsInstallOk hook so that frontends can override this check if they want to and in exchange removes the loop-breaking from MarkInstall itself and does it before any dependency is installed. Closes: 740750 --- test/integration/test-bug-735967-lib32-to-i386-unavailable | 3 +++ 1 file changed, 3 insertions(+) (limited to 'test/integration/test-bug-735967-lib32-to-i386-unavailable') diff --git a/test/integration/test-bug-735967-lib32-to-i386-unavailable b/test/integration/test-bug-735967-lib32-to-i386-unavailable index 4dbe1d25d..e9f3bf96d 100755 --- a/test/integration/test-bug-735967-lib32-to-i386-unavailable +++ b/test/integration/test-bug-735967-lib32-to-i386-unavailable @@ -12,6 +12,9 @@ insertpackage 'unstable' 'libnss-mdns' 'amd64,i386' '0.10-6' 'Multi-Arch: same Breaks: lib32nss-mdns (<< 0.10-6)' insertpackage 'unstable' 'libnss-mdns-i386' 'i386' '0.10-6' 'Multi-Arch: foreign Depends: libnss-mdns' +# introduce some dummies so that there are versions, but none works +insertpackage 'unstable' 'libnss-mdns-i386' 'amd64' '0.1-6' +insertpackage 'experimental' 'libnss-mdns-amd64' 'i386,amd64' '0.10-6' 'Provides: libnss-mdns-i386' insertpackage 'unstable' 'foo' 'amd64' '1' 'Depends: libfoo' insertpackage 'unstable' 'libfoo' 'amd64' '1' 'Depends: libfoo-bin' -- cgit v1.2.3