From 66c3875df391b1120b43831efcbe88a78569fbfe Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 7 Apr 2015 16:58:44 +0200 Subject: avoid depends on std::string implementation for pkgAcquire::Item::Mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In /experimental this is resolved by deprecating Mode and moving to a new std::string, but that breaks ABI of course, so that was out of question. We can't change to a malloc/free style c-string either as Mode is public and hence a library user could be setting this as well. std::string implementors actually helped us out here with copy-on-write which means that while the variable "obviously" runs out of scope here, in reality you get the correct result as the string we work with here comes from the configuration in which it is still valid. Such a dependency on magic is bad of course, but its still interesting that only python3 seems to have an issue with it… With some silly explicit if-else assigning we can sidestep this issue while retaining the same output for 99.99% of all users (= noone actually configures additional compression algorithms which are also provided by repositories…), but even for these 0.01% its just a small change in the display as Mode can not be used for anything else. Example: apt/aptitude uses it in its 'update' implementations in the one-line progress at the bottom for specific items. Closes: 781858 --- apt-pkg/acquire-item.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index 253cbdaf7..0bcafdc5c 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -1194,8 +1194,18 @@ void pkgAcqIndex::Done(string Message,unsigned long long Size,string Hash, Desc.URI = decompProg + ":" + FileName; QueueURI(Desc); - // FIXME: this points to a c++ string that goes out of scope - Mode = decompProg.c_str(); + if (decompProg == "copy") + Mode = "copy"; + else if (decompProg == "xz") + Mode = "xz"; + else if (decompProg == "lzma") + Mode = "lzma"; + else if (decompProg == "bzip2") + Mode = "bzip2"; + else if (decompProg == "gzip") + Mode = "gzip"; + else + Mode = "decomp"; } /*}}}*/ // AcqIndexTrans::pkgAcqIndexTrans - Constructor /*{{{*/ -- cgit v1.2.3-70-g09d2 From 3af3768e1a0ae8519ac85fbe1eb4494eeb076fa2 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 7 Apr 2015 12:20:56 +0200 Subject: fix crash in order writing in pkgDPkgPM::WriteApportReport() libapt can be configured to write various bits of information to a file creating a report via apport. This is disabled by default in Debian and apport residing only in /experimental so far, but Ubuntu and other derivatives have this (in some versions) enabled by default and there is no regression potentially here. The crash is caused by a mismatch of operations vs. strings for operations, so adding the missing strings for these operations solves the problem. [commit message by David Kalnischkies] LP: #1436626 --- apt-pkg/deb/dpkgpm.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index e23ca466d..82e045fd3 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -1900,8 +1900,15 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg) } } - // log the ordering - const char *ops_str[] = {"Install", "Configure","Remove","Purge"}; + // log the ordering, see dpkgpm.h and the "Ops" enum there + const char *ops_str[] = { + "Install", + "Configure", + "Remove", + "Purge", + "ConfigurePending", + "TriggersPending", + }; fprintf(report, "AptOrdering:\n"); for (vector::iterator I = List.begin(); I != List.end(); ++I) if ((*I).Pkg != NULL) -- cgit v1.2.3-70-g09d2 From 7e9b7ea8236a79580c4ca47712558096d66bad53 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 7 Apr 2015 18:31:12 +0200 Subject: demote VectorizeString gcc attribute from const to pure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit g++-5 generates a slightly broken libapt which doesn't split architecture configurations correctly resulting in e.g. Packages files requested for the bogus architecture 'amd64,i386' instead of for amd64 and i386. The reason is an incorrectly applied attribute marking the function as const, while functions with pointer arguments are not allowed to be declared as such (note that char& is a char* in disguise). Demoting the attribute to pure fixes this issue – better would be dropping the & from char but that is an API change… Neither earlier g++ versions nor clang use this attribute to generate broken code, so we don't need a rebuild of dependencies or anything and g++-5 isn't even included in jessie, but the effect is so strange and apt popular enough to consider avoiding this problem anyhow. --- apt-pkg/contrib/strutl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 185cdc3fc..f4f80834b 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -79,7 +79,7 @@ bool TokSplitString(char Tok,char *Input,char **List, unsigned long ListMax); // split a given string by a char -std::vector VectorizeString(std::string const &haystack, char const &split) APT_CONST; +std::vector VectorizeString(std::string const &haystack, char const &split) APT_PURE; /* \brief Return a vector of strings from string "input" where "sep" * is used as the delimiter string. -- cgit v1.2.3-70-g09d2 From 596ec43ce34421080a58b28299c1ed9cb0dbaa25 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 12 Apr 2015 19:16:01 +0200 Subject: parse specific-arch dependencies correctly on single-arch systems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On single-arch the parsing was creating groupnames like 'apt:amd64' even through it should be 'apt' and a package in it belonging to architecture amd64. The result for foreign architectures was as expected: The dependency isn't satisfiable, but for native architecture it means the wrong package (ala apt:amd64:amd64) is linked so this is also not satisfiable, which is very much not expected. No longer excluding single-arch from this codepath allows the generation of the correct links, which still link to non-exisiting packages for foreign dependencies, but natives link to the expected native package just as if no architecture was given. For negative arch-specific dependencies ala Conflicts this matter was worse as apt will believe there isn't a Conflict to resolve, tricking it into calculating a solution dpkg will refuse. Architecture specific positive dependencies are rare in jessie – the only one in amd64 main is foreign –, negative dependencies do not even exist. Neither class has a native specimen, so no package in jessie is effected by this bug, but it might be interesting for stretch upgrades. This also means the regression potential is very low. Closes: 777760 --- apt-pkg/deb/deblistparser.cc | 2 +- test/integration/test-multiarch-foreign | 159 ++++++++++++++------- .../test-specific-architecture-dependencies | 148 ++++++++++++++++++- 3 files changed, 254 insertions(+), 55 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index 4eef66c2b..213235c2b 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -770,7 +770,7 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver, if (NewDepends(Ver,Package,"none",Version,Op,Type) == false) return false; } - else if (MultiArchEnabled == true && found != string::npos && + else if (found != string::npos && strcmp(Package.c_str() + found, ":any") != 0) { string Arch = Package.substr(found+1, string::npos); diff --git a/test/integration/test-multiarch-foreign b/test/integration/test-multiarch-foreign index 332466d96..240f1a4d1 100755 --- a/test/integration/test-multiarch-foreign +++ b/test/integration/test-multiarch-foreign @@ -7,9 +7,13 @@ setupenvironment configarchitecture 'amd64' 'i386' 'armel' insertpackage 'unstable' 'cool-foo' 'amd64,i386' '1.0' 'Depends: foo' +insertpackage 'unstable' 'cool-foo-x64' 'amd64' '1.0' 'Depends: foo:amd64' +insertpackage 'unstable' 'cool-foo-x32' 'amd64' '1.0' 'Depends: foo:i386' insertpackage 'unstable' 'foo' 'amd64,i386,armel' '1.0' 'Multi-Arch: foreign' insertpackage 'unstable' 'cool-bar' 'amd64,i386' '1.0' 'Depends: bar-provider' +insertpackage 'unstable' 'cool-bar-x64' 'amd64' '1.0' 'Depends: bar-provider:amd64' +insertpackage 'unstable' 'cool-bar-x32' 'amd64' '1.0' 'Depends: bar-provider:i386' insertpackage 'unstable' 'bar' 'amd64,i386,armel' '1.0' 'Provides: bar-provider Multi-Arch: foreign' @@ -27,28 +31,6 @@ Inst cool-foo:i386 (1.0 unstable [i386]) Conf foo (1.0 unstable [amd64]) Conf cool-foo:i386 (1.0 unstable [i386])' aptget install cool-foo:i386 -s -testequal 'Reading package lists... -Building dependency tree... -The following extra packages will be installed: - foo -The following NEW packages will be installed: - cool-foo foo -0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 unstable [amd64]) -Inst cool-foo (1.0 unstable [amd64]) -Conf foo (1.0 unstable [amd64]) -Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s - -testequal 'Reading package lists... -Building dependency tree... -The following NEW packages will be installed: - cool-foo foo -0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst foo (1.0 unstable [amd64]) -Inst cool-foo (1.0 unstable [amd64]) -Conf foo (1.0 unstable [amd64]) -Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s - testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -69,10 +51,6 @@ Inst cool-foo (1.0 unstable [amd64]) Conf foo:armel (1.0 unstable [armel]) Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:armel -s - - - - testequal 'Reading package lists... Building dependency tree... The following extra packages will be installed: @@ -87,6 +65,60 @@ Conf cool-bar:i386 (1.0 unstable [i386])' aptget install cool-bar:i386 -s testequal 'Reading package lists... Building dependency tree... +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + bar:armel cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:armel (1.0 unstable [armel]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:armel (1.0 unstable [armel]) +Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s + +testequal "Reading package lists... +Building dependency tree... +Note, selecting 'bar:i386' instead of 'bar-provider:i386' +The following NEW packages will be installed: + bar:i386 cool-bar +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst bar:i386 (1.0 unstable [i386]) +Inst cool-bar (1.0 unstable [amd64]) +Conf bar:i386 (1.0 unstable [i386]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0 + +satisfiable_in_singlearch() { + testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + foo +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 -s + + testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + cool-foo foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo (1.0 unstable [amd64])' aptget install cool-foo:amd64 foo:amd64 -s + + testequal 'Reading package lists... +Building dependency tree... The following extra packages will be installed: bar The following NEW packages will be installed: @@ -97,7 +129,7 @@ Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 -s -testequal 'Reading package lists... + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: bar cool-bar @@ -107,44 +139,71 @@ Inst cool-bar (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:amd64 -s -testequal 'Reading package lists... + testequal "Reading package lists... Building dependency tree... +Note, selecting 'bar' instead of 'bar-provider' The following NEW packages will be installed: - bar:i386 cool-bar + bar cool-bar 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:i386 (1.0 unstable [i386]) +Inst bar (1.0 unstable [amd64]) Inst cool-bar (1.0 unstable [amd64]) -Conf bar:i386 (1.0 unstable [i386]) -Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:i386 -s +Conf bar (1.0 unstable [amd64]) +Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0 -testequal 'Reading package lists... + testequal 'Reading package lists... Building dependency tree... +The following extra packages will be installed: + foo The following NEW packages will be installed: - bar:armel cool-bar + cool-foo-x64 foo 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:armel (1.0 unstable [armel]) -Inst cool-bar (1.0 unstable [amd64]) -Conf bar:armel (1.0 unstable [armel]) -Conf cool-bar (1.0 unstable [amd64])' aptget install cool-bar:amd64 bar:armel -s +Inst foo (1.0 unstable [amd64]) +Inst cool-foo-x64 (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo-x64 (1.0 unstable [amd64])' aptget install cool-foo-x64 -s +} -testequal "Reading package lists... +#FIXME: do not work in single-arch as i386 isn't known at cache generation time + testequal 'Reading package lists... Building dependency tree... -Note, selecting 'bar' instead of 'bar-provider' +The following extra packages will be installed: + foo The following NEW packages will be installed: - bar cool-bar + cool-foo-x32 foo +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst foo (1.0 unstable [amd64]) +Inst cool-foo-x32 (1.0 unstable [amd64]) +Conf foo (1.0 unstable [amd64]) +Conf cool-foo-x32 (1.0 unstable [amd64])' aptget install cool-foo-x32 -s + + testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + bar +The following NEW packages will be installed: + bar cool-bar-x32 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst bar (1.0 unstable [amd64]) -Inst cool-bar (1.0 unstable [amd64]) +Inst cool-bar-x32 (1.0 unstable [amd64]) Conf bar (1.0 unstable [amd64]) -Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider -s -q=0 +Conf cool-bar-x32 (1.0 unstable [amd64])' aptget install cool-bar-x32 -s -q=0 -testequal "Reading package lists... + testequal 'Reading package lists... Building dependency tree... -Note, selecting 'bar:i386' instead of 'bar-provider:i386' +The following extra packages will be installed: + bar The following NEW packages will be installed: - bar:i386 cool-bar + bar cool-bar-x64 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. -Inst bar:i386 (1.0 unstable [i386]) -Inst cool-bar (1.0 unstable [amd64]) -Conf bar:i386 (1.0 unstable [i386]) -Conf cool-bar (1.0 unstable [amd64])" aptget install cool-bar bar-provider:i386 -s -q=0 +Inst bar (1.0 unstable [amd64]) +Inst cool-bar-x64 (1.0 unstable [amd64]) +Conf bar (1.0 unstable [amd64]) +Conf cool-bar-x64 (1.0 unstable [amd64])' aptget install cool-bar-x64 -s -q=0 + + +satisfiable_in_singlearch + +msgmsg 'switch to single architecture' +configarchitecture 'amd64' + +satisfiable_in_singlearch diff --git a/test/integration/test-specific-architecture-dependencies b/test/integration/test-specific-architecture-dependencies index 078a84654..ccfced150 100755 --- a/test/integration/test-specific-architecture-dependencies +++ b/test/integration/test-specific-architecture-dependencies @@ -12,16 +12,19 @@ insertinstalledpackage 'provider' 'amd64' '1' 'Provides: foo' insertpackage 'unstable' 'pre-depender' 'all' '1' 'Pre-Depends: libc6:i386' insertpackage 'unstable' 'depender' 'all' '1' 'Depends: libc6:i386' +insertpackage 'unstable' 'depender-x32' 'i386,amd64' '1' 'Depends: libc6:i386' +insertpackage 'unstable' 'depender-x64' 'i386,amd64' '1' 'Depends: libc6:amd64' insertpackage 'unstable' 'breaker' 'all' '1' 'Breaks: libold (<< 2)' -insertpackage 'unstable' 'breaker-x32' 'amd64' '1' 'Breaks: libold:i386 (<< 2)' -insertpackage 'unstable' 'breaker-x64' 'i386' '1' 'Breaks: libold:amd64 (<< 2)' +insertpackage 'unstable' 'breaker-x32' 'i386,amd64' '1' 'Breaks: libold:i386 (<< 2)' +insertpackage 'unstable' 'breaker-x64' 'i386,amd64' '1' 'Breaks: libold:amd64 (<< 2)' # conflicts with no effect insertpackage 'unstable' 'oldconflictor' 'all' '1' 'Conflicts: libold (<< 0)' insertpackage 'unstable' 'oldconflictor-x32' 'amd64' '1' 'Conflicts: libold:i386 (<< 0)' insertpackage 'unstable' 'oldconflictor-x64' 'i386' '1' 'Conflicts: libold:amd64 (<< 0)' insertpackage 'unstable' 'foo-depender' 'i386,amd64' '1' 'Depends: foo' +insertpackage 'unstable' 'foo-native-depender' 'amd64' '1' 'Depends: foo:amd64' insertpackage 'unstable' 'foo-foreign-depender' 'i386' '1' 'Depends: foo:amd64' insertpackage 'unstable' 'foo-conflictor' 'i386,amd64' '1' 'Conflicts: foo' @@ -54,6 +57,54 @@ Inst depender (1 unstable [all]) Conf libc6:i386 (1 unstable [i386]) Conf depender (1 unstable [all])' aptget install depender -s +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6:i386 +The following NEW packages will be installed: + depender-x32:i386 libc6:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:i386 (1 unstable [i386]) +Inst depender-x32:i386 (1 unstable [i386]) +Conf libc6:i386 (1 unstable [i386]) +Conf depender-x32:i386 (1 unstable [i386])' aptget install depender-x32:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6:i386 +The following NEW packages will be installed: + depender-x32 libc6:i386 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6:i386 (1 unstable [i386]) +Inst depender-x32 (1 unstable [amd64]) +Conf libc6:i386 (1 unstable [i386]) +Conf depender-x32 (1 unstable [amd64])' aptget install depender-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64 (1 unstable [amd64]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64:i386 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64:i386 (1 unstable [i386]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64:i386 (1 unstable [i386])' aptget install depender-x64:i386 -s + testequal 'Reading package lists... Building dependency tree... The following packages will be REMOVED: @@ -75,7 +126,29 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv libold:i386 [1] Inst breaker-x32 (1 unstable [amd64]) -Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32 -s +Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold:i386 +The following NEW packages will be installed: + breaker-x32:i386 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold:i386 [1] +Inst breaker-x32:i386 (1 unstable [i386]) +Conf breaker-x32:i386 (1 unstable [i386])' aptget install breaker-x32:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold +The following NEW packages will be installed: + breaker-x64 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold [1] +Inst breaker-x64 (1 unstable [amd64]) +Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -s testequal 'Reading package lists... Building dependency tree... @@ -86,7 +159,7 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. Remv libold [1] Inst breaker-x64:i386 (1 unstable [i386]) -Conf breaker-x64:i386 (1 unstable [i386])' aptget install breaker-x64 -s +Conf breaker-x64:i386 (1 unstable [i386])' aptget install breaker-x64:i386 -s testequal 'Reading package lists... Building dependency tree... @@ -132,6 +205,14 @@ The following packages have unmet dependencies: foo-depender:i386 : Depends: foo:i386 but it is not installable E: Unable to correct problems, you have held broken packages.' aptget install foo-depender:i386 -s +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-native-depender +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo-native-depender (1 unstable [amd64]) +Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s + testequal 'Reading package lists... Building dependency tree... The following NEW packages will be installed: @@ -180,3 +261,62 @@ The following NEW packages will be installed: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Inst foo-no-conflictor:i386 (1 unstable [i386]) Conf foo-no-conflictor:i386 (1 unstable [i386])' aptget install foo-no-conflictor:i386 -s + +msgmsg 'switch to single architecture' +configarchitecture 'amd64' + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libc6 +The following NEW packages will be installed: + depender-x64 libc6 +0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. +Inst libc6 (1 unstable [amd64]) +Inst depender-x64 (1 unstable [amd64]) +Conf libc6 (1 unstable [amd64]) +Conf depender-x64 (1 unstable [amd64])' aptget install depender-x64 -s + +testequal 'Reading package lists... +Building dependency tree... +E: Unable to locate package depender-x64' aptget install depender-x64:i386 -s + +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + foo-native-depender +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst foo-native-depender (1 unstable [amd64]) +Conf foo-native-depender (1 unstable [amd64])' aptget install foo-native-depender -s + +# libold:i386 is installed, but we don't see it as i386 isn't configured +testequal 'Reading package lists... +Building dependency tree... +The following NEW packages will be installed: + breaker-x32 +0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. +Inst breaker-x32 (1 unstable [amd64]) +Conf breaker-x32 (1 unstable [amd64])' aptget install breaker-x32:amd64 -s + +testequal 'Reading package lists... +Building dependency tree... +The following packages will be REMOVED: + libold +The following NEW packages will be installed: + breaker-x64 +0 upgraded, 1 newly installed, 1 to remove and 0 not upgraded. +Remv libold [1] +Inst breaker-x64 (1 unstable [amd64]) +Conf breaker-x64 (1 unstable [amd64])' aptget install breaker-x64:amd64 -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: + depender-x32 : Depends: libc6:i386 but it is not installable +E: Unable to correct problems, you have held broken packages.' aptget install depender-x32 -s -- cgit v1.2.3-70-g09d2