diff options
-rw-r--r-- | apt-pkg/depcache.cc | 5 | ||||
-rw-r--r-- | apt-private/private-output.cc | 49 | ||||
-rwxr-xr-x | test/integration/test-apt-cli-list | 18 | ||||
-rwxr-xr-x | test/integration/test-bug-multiarch-upgrade | 29 |
4 files changed, 67 insertions, 34 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 7e75a6fe3..c39e8c628 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1258,6 +1258,11 @@ bool pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, if (PkgState[Pkg->ID].InstallVer == 0) continue; + /* Ignore negative dependencies that we are not going to + get installed */ + if (PkgState[Pkg->ID].InstallVer != *I) + continue; + if ((Start->Version != 0 || TrgPkg != Pkg) && PkgState[Pkg->ID].CandidateVer != PkgState[Pkg->ID].InstallVer && PkgState[Pkg->ID].CandidateVer != *I && diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc index e9b8037da..2ae112af4 100644 --- a/apt-private/private-output.cc +++ b/apt-private/private-output.cc @@ -190,45 +190,44 @@ void ListSingleVersion(pkgCacheFile &CacheFile, pkgRecords &records, /*{{{*/ // raring/linux-kernel version [upradable: new-version] // description pkgPolicy *policy = CacheFile.GetPolicy(); - out << std::setiosflags(std::ios::left) - << _config->Find("APT::Color::Highlight", "") - << name_str - << _config->Find("APT::Color::Neutral", "") - << "/" << suite - << " "; + std::string VersionStr = GetVersion(CacheFile, V); + std::string CandidateVerStr = GetCandidateVersion(CacheFile, P); + std::string InstalledVerStr = GetInstalledVersion(CacheFile, P); + std::string StatusStr; if(P.CurrentVer() == V && state.Upgradable()) { - out << GetVersion(CacheFile, V) - << " " - << "[" << _("installed,upgradable to: ") - << GetCandidateVersion(CacheFile, P) << "]"; + strprintf(StatusStr, _("[installed,upgradable to: %s]"), + CandidateVerStr.c_str()); } else if (P.CurrentVer() == V) { - out << GetVersion(CacheFile, V) - << " "; if(!V.Downloadable()) - out << _("[installed,local]"); + StatusStr = _("[installed,local]"); else if(V.Automatic() && state.Garbage) - out << _("[installed,auto-removable]"); + StatusStr = _("[installed,auto-removable]"); else if (state.Flags & pkgCache::Flag::Auto) - out << _("[installed,automatic]"); + StatusStr = _("[installed,automatic]"); else - out << _("[installed]"); + StatusStr = _("[installed]"); } else if (P.CurrentVer() && policy->GetCandidateVer(P) == V && state.Upgradable()) { - out << GetVersion(CacheFile, V) - << " " - << _("[upgradable from: ") - << GetInstalledVersion(CacheFile, P) << "]"; + strprintf(StatusStr, _("[upgradable from: %s]"), + InstalledVerStr.c_str()); } else { if (V.ParentPkg()->CurrentState == pkgCache::State::ConfigFiles) - out << GetVersion(CacheFile, V) - << " " - << _("[residual-config]"); + StatusStr = _("[residual-config]"); else - out << GetVersion(CacheFile, V); + StatusStr = ""; } - out << " " << GetArchitecture(CacheFile, P); + out << std::setiosflags(std::ios::left) + << _config->Find("APT::Color::Highlight", "") + << name_str + << _config->Find("APT::Color::Neutral", "") + << "/" << suite + << " " + << VersionStr << " " + << GetArchitecture(CacheFile, P); + if (StatusStr != "") + out << " " << StatusStr; if (include_summary) { out << std::endl diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list index 8d5df9051..47507aeb8 100755 --- a/test/integration/test-apt-cli-list +++ b/test/integration/test-apt-cli-list @@ -18,30 +18,30 @@ setupaptarchive APTARCHIVE=$(readlink -f ./aptarchive) testequal "Listing... -bar/now 1.0 [installed,local] i386 +bar/now 1.0 i386 [installed,local] foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list testequal "Listing... foo/unstable 1.0 all -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list "foo*" +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list "foo*" testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386" apt list --upgradable +foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list --upgradable # FIXME: hm, hm - does it make sense to have this different? shouldn't # we use "installed,upgradable" consitently? testequal "Listing... -bar/now 1.0 [installed,local] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386" apt list --installed +bar/now 1.0 i386 [installed,local] +foobar/now 1.0 i386 [installed,upgradable to: 2.0]" apt list --installed testequal "Listing... -foobar/unstable 2.0 [upgradable from: 1.0] i386 -foobar/now 1.0 [installed,upgradable to: 2.0] i386 +foobar/unstable 2.0 i386 [upgradable from: 1.0] +foobar/now 1.0 i386 [installed,upgradable to: 2.0] " apt list foobar --all-versions testequal "Listing... -bar/now 1.0 [installed,local] i386 +bar/now 1.0 i386 [installed,local] an autogenerated dummy bar=1.0/installed " apt list bar --verbose diff --git a/test/integration/test-bug-multiarch-upgrade b/test/integration/test-bug-multiarch-upgrade new file mode 100755 index 000000000..dc3725df1 --- /dev/null +++ b/test/integration/test-bug-multiarch-upgrade @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +TESTDIR=$(readlink -f $(dirname $0)) +. $TESTDIR/framework +setupenvironment +configarchitecture 'amd64' 'i386' + +insertinstalledpackage 'libcups2' 'amd64' '1' 'Multi-Arch: same' +insertinstalledpackage 'libcups2' 'i386' '1' 'Multi-Arch: same' + +insertpackage 'unstable' 'libcups2' 'amd64' '0' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'amd64' '2' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'i386' '0' 'Multi-Arch: same' +insertpackage 'unstable' 'libcups2' 'i386' '2' 'Multi-Arch: same' + +setupaptarchive + +testequal 'Reading package lists... +Building dependency tree... +The following extra packages will be installed: + libcups2 +The following packages will be upgraded: + libcups2 libcups2:i386 +2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +Inst libcups2 [1] (2 unstable [amd64]) [libcups2:amd64 on libcups2:i386] [libcups2:i386 on libcups2:amd64] [libcups2:i386 ] +Inst libcups2:i386 [1] (2 unstable [i386]) +Conf libcups2 (2 unstable [amd64]) +Conf libcups2:i386 (2 unstable [i386])' aptget install -s libcups2:i386 |