diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-07-12 13:41:12 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-08-10 17:27:17 +0200 |
commit | a0c19a217ca2ed38ae0ecb4b8d2d4f8c4e53289f (patch) | |
tree | 54bfe9d9335f1a26e4c687cbba7da51097fa73f8 /apt-private/private-cacheset.h | |
parent | b17d75804566ced55109b4b0498b7ed0faad389b (diff) |
implement a more generic ShowList method
apt-get is displaying various lists of package names, which until now it
was building as a string before passing it to ShowList, which inserted
linebreaks at fitting points and showed a title if needed, but it never
really understood what it was working with. With the help of C++11 the
new generic knows not only what it works with, but generates the list on
the fly rather than asking for it and potentially discarding parts of
the input (= the non-default verbose display). It also doubles as a test
for how usable the CacheSets are with C++11.
(Not all callers are adapted yet.)
Git-Dch: Ignore
Diffstat (limited to 'apt-private/private-cacheset.h')
-rw-r--r-- | apt-private/private-cacheset.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/apt-private/private-cacheset.h b/apt-private/private-cacheset.h index 518f179f3..7cafe4fdd 100644 --- a/apt-private/private-cacheset.h +++ b/apt-private/private-cacheset.h @@ -12,6 +12,8 @@ #include <apt-pkg/cacheiterators.h> #include <apt-pkg/macros.h> +#include <apt-private/private-output.h> + #include <algorithm> #include <vector> #include <string.h> @@ -21,8 +23,6 @@ #include <string> #include <utility> -#include "private-output.h" - #include <apti18n.h> class OpProgress; @@ -174,17 +174,19 @@ public: std::string VersionsList; SPtrArray<bool> Seen = new bool[Cache.GetPkgCache()->Head().PackageCount]; memset(Seen,0,Cache.GetPkgCache()->Head().PackageCount*sizeof(*Seen)); + APT::PackageList pkglist; for (pkgCache::DepIterator Dep = Pkg.RevDependsList(); Dep.end() == false; ++Dep) { if (Dep->Type != pkgCache::Dep::Replaces) continue; - if (Seen[Dep.ParentPkg()->ID] == true) + pkgCache::PkgIterator const DP = Dep.ParentPkg(); + if (Seen[DP->ID] == true) continue; - Seen[Dep.ParentPkg()->ID] = true; - List += Dep.ParentPkg().FullName(true) + " "; - //VersionsList += std::string(Dep.ParentPkg().CurVersion) + "\n"; ??? + Seen[DP->ID] = true; + pkglist.insert(DP); } - ShowList(c1out,_("However the following packages replace it:"),List,VersionsList); + ShowList(c1out, _("However the following packages replace it:"), pkglist, + &AlwaysTrue, &PrettyFullName, &EmptyString); } c1out << std::endl; } |