Browse Source

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
tags/debian/1.7.0_rc1
David Kalnischkies 2 years ago
parent
commit
32e0587d18
3 changed files with 34 additions and 10 deletions
  1. +10
    -5
      apt-private/private-cacheset.h
  2. +1
    -1
      apt-private/private-list.cc
  3. +23
    -4
      test/integration/test-apt-cli-list

+ 10
- 5
apt-private/private-cacheset.h View File

@@ -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;
}


+ 1
- 1
apt-private/private-list.cc View File

@@ -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)


+ 23
- 4
test/integration/test-apt-cli-list View File

@@ -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

Loading…
Cancel
Save