Browse Source

fix apt list output for pkgs in dpkg ^rc state

Packages in the "deinstall ok config-file" have no candidate or
instaleld version. So they must be special cased in the apt list
generation.
debian/1.8.y
Michael Vogt 8 years ago
parent
commit
c8259fcde1
  1. 8
      apt-private/private-cacheset.cc
  2. 4
      apt-private/private-output.cc
  3. 5
      test/integration/test-apt-cli-list

8
apt-private/private-cacheset.cc

@ -73,7 +73,13 @@ bool GetLocalitySortedVersionSet(pkgCacheFile &CacheFile,
else
{
pkgPolicy *policy = CacheFile.GetPolicy();
output_set.insert(policy->GetCandidateVer(P));
if (policy->GetCandidateVer(P).IsGood())
output_set.insert(policy->GetCandidateVer(P));
else
// no candidate, this may happen for packages in
// dpkg "deinstall ok config-file" state - we pick the first ver
// (which should be the only one)
output_set.insert(P.VersionList());
}
}
progress.Done();

4
apt-private/private-output.cc

@ -146,6 +146,10 @@ static std::string GetArchitecture(pkgCacheFile &CacheFile, pkgCache::PkgIterato
pkgCache::VerIterator inst = P.CurrentVer();
pkgCache::VerIterator cand = policy->GetCandidateVer(P);
// this may happen for packages in dpkg "deinstall ok config-file" state
if (inst.IsGood() == false && cand.IsGood() == false)
return P.VersionList().Arch();
return inst ? inst.Arch() : cand.Arch();
}
/*}}}*/

5
test/integration/test-apt-cli-list

@ -51,3 +51,8 @@ bar/now 1.0 i386 [installed,local]
an autogenerated dummy bar=1.0/installed
" apt list bar --verbose
# test for dpkg ^rc state
insertinstalledpackage 'conf-only' 'i386' '1.0' '' '' 'deinstall ok config-files'
testequal "Listing...
conf-only/now 1.0 i386 [residual-config]" apt list conf-only

Loading…
Cancel
Save