diff options
author | David Kalnischkies <david@kalnischkies.de> | 2018-09-15 17:45:16 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2018-09-15 17:45:16 +0200 |
commit | 32e0587d1819ca4b09cd146b0114a1c56ce4a8a9 (patch) | |
tree | 8773f651557f6e2306d5510dd0dcff6bb7b4e79c | |
parent | a5953d914488c80c28fba6b59d2f0be461cd9f03 (diff) |
Show all architectures in 'apt list' output
The uniqueness in std::set containers is ensured by the ordering
operator we provide, but it was not considering that different versions
can have the same description like the different architectures for a
version of a package.
Closes: #908218
-rw-r--r-- | apt-private/private-cacheset.h | 15 | ||||
-rw-r--r-- | apt-private/private-list.cc | 2 | ||||
-rwxr-xr-x | test/integration/test-apt-cli-list | 27 |
3 files changed, 34 insertions, 10 deletions
diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h index d20d00b68..3370bd03a 100644 --- a/apt-private/private-cacheset.h +++ b/apt-private/private-cacheset.h @@ -26,6 +26,7 @@ public: {} const pkgCache::DescFile * CachedDescFile() const { return descFile; } operator pkgCache::VerIterator() const { return iter; } + map_id_t ID() const { return iter->ID; } }; struct VersionSortDescriptionLocality /*{{{*/ @@ -36,17 +37,21 @@ struct VersionSortDescriptionLocality /*{{{*/ pkgCache::DescFile const *A = v_lhs.CachedDescFile(); pkgCache::DescFile const *B = v_rhs.CachedDescFile(); - if (A == nullptr && B == nullptr) - return false; - if (A == nullptr) + { + if (B == nullptr) + return v_lhs.ID() < v_rhs.ID(); return true; - - if (B == nullptr) + } + else if (B == nullptr) return false; if (A->File == B->File) + { + if (A->Offset == B->Offset) + return v_lhs.ID() < v_rhs.ID(); return A->Offset < B->Offset; + } return A->File < B->File; } diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc index 2c9b349a3..7c8c89777 100644 --- a/apt-private/private-list.cc +++ b/apt-private/private-list.cc @@ -129,7 +129,7 @@ bool DoList(CommandLine &Cmd) else ListSingleVersion(CacheFile, records, V, outs, format); output_map.insert(std::make_pair<std::string, std::string>( - V.ParentPkg().Name(), outs.str())); + V.ParentPkg().FullName(), outs.str())); } // FIXME: SORT! and make sorting flexible (alphabetic, by pkg status) diff --git a/test/integration/test-apt-cli-list b/test/integration/test-apt-cli-list index 8928a4856..3a9ca2c15 100755 --- a/test/integration/test-apt-cli-list +++ b/test/integration/test-apt-cli-list @@ -5,7 +5,7 @@ TESTDIR="$(readlink -f "$(dirname "$0")")" . "$TESTDIR/framework" setupenvironment -configarchitecture "i386" +configarchitecture 'i386' 'armel' insertpackage 'unstable' 'foo' 'all' '1.0' insertinstalledpackage 'bar' 'i386' '1.0' @@ -17,6 +17,10 @@ insertinstalledpackage 'baz' 'all' '0.1' insertpackage 'testing' 'baz' 'all' '1.0' insertpackage 'unstable' 'baz' 'all' '2.0' +insertinstalledpackage 'foreign' 'armel' '1.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'foreign' 'i386,armel' '2.0' 'Multi-Arch: foreign' +insertpackage 'unstable' 'lib' 'i386,armel' '2.0' 'Multi-Arch: same' + setupaptarchive testsuccessequal "Listing... @@ -24,7 +28,11 @@ bar/now 1.0 i386 [installed,local] baz/unstable 2.0 all [upgradable from: 0.1] dpkg/now 1.16.2+fake all [installed,local] foo/unstable 1.0 all -foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list +foobar/unstable 2.0 i386 [upgradable from: 1.0] +foreign/unstable 2.0 armel [upgradable from: 1.0] +foreign/unstable 2.0 i386 +lib/unstable 2.0 armel +lib/unstable 2.0 i386" apt list testsuccessequal "Listing... foo/unstable 1.0 all @@ -32,7 +40,8 @@ foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list "foo*" testsuccessequal "Listing... baz/unstable 2.0 all [upgradable from: 0.1] -foobar/unstable 2.0 i386 [upgradable from: 1.0]" apt list --upgradable +foobar/unstable 2.0 i386 [upgradable from: 1.0] +foreign/unstable 2.0 armel [upgradable from: 1.0]" apt list --upgradable # FIXME: hm, hm - does it make sense to have this different? shouldn't # we use "installed,upgradable" consistently? @@ -40,7 +49,8 @@ testsuccessequal "Listing... bar/now 1.0 i386 [installed,local] baz/now 0.1 all [installed,upgradable to: 2.0] dpkg/now 1.16.2+fake all [installed,local] -foobar/now 1.0 i386 [installed,upgradable to: 2.0]" apt list --installed +foobar/now 1.0 i386 [installed,upgradable to: 2.0] +foreign/now 1.0 armel [installed,upgradable to: 2.0]" apt list --installed testsuccessequal "Listing... bar/now 1.0 i386 [installed,local] @@ -72,3 +82,12 @@ baz/now 0.1 all [installed,upgradable to: 2.0] # test format strings for machine parseable output testsuccessequal 'bar - 1.0 - 1.0 baz - 0.1 - 2.0' apt list -qq bar baz -o APT::Cmd::use-format=true -o APT::Cmd::format="\${Package} - \${installed:Version} - \${candidate:Version}" + + +insertinstalledpackage 'lib' 'i386,armel' '1.0' 'Multi-Arch: same' +testsuccessequal 'Listing... +baz/unstable 2.0 all [upgradable from: 0.1] +foobar/unstable 2.0 i386 [upgradable from: 1.0] +foreign/unstable 2.0 armel [upgradable from: 1.0] +lib/unstable 2.0 armel [upgradable from: 1.0] +lib/unstable 2.0 i386 [upgradable from: 1.0]' apt list --upgradeable |