/*}}}*/
// Include Files /*{{{*/
#include <apt-pkg/error.h>
+#include <cassert>
#include <apt-pkg/pkgcachegen.h>
+#include <apt-pkg/cachefile.h>
#include <apt-pkg/init.h>
#include <apt-pkg/progress.h>
#include <apt-pkg/sourcelist.h>
#include <apt-pkg/tagfile.h>
#include <apt-pkg/algorithms.h>
#include <apt-pkg/sptr.h>
+#include <apt-pkg/packageset.h>
#include <config.h>
#include <apti18n.h>
bool DumpPackage(CommandLine &CmdL)
{
pkgCache &Cache = *GCache;
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
- {
- pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
- if (Pkg.end() == true)
- {
- _error->Warning(_("Unable to locate package %s"),*I);
- continue;
- }
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ {
cout << "Package: " << Pkg.FullName(true) << endl;
cout << "Versions: " << endl;
for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; Cur++)
bool Stats(CommandLine &Cmd)
{
pkgCache &Cache = *GCache;
- cout << _("Total package names: ") << Cache.Head().PackageCount << " (" <<
+ cout << _("Total package names: ") << Cache.Head().GroupCount << " (" <<
+ SizeToStr(Cache.Head().GroupCount*Cache.Head().GroupSz) << ')' << endl
+ << _("Total package structures: ") << Cache.Head().PackageCount << " (" <<
SizeToStr(Cache.Head().PackageCount*Cache.Head().PackageSz) << ')' << endl;
int Normal = 0;
pkgCache &Cache = *GCache;
SPtrArray<unsigned> Colours = new unsigned[Cache.Head().PackageCount];
memset(Colours,0,sizeof(*Colours)*Cache.Head().PackageCount);
-
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
- {
- pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
- if (Pkg.end() == true)
- {
- _error->Warning(_("Unable to locate package %s"),*I);
- continue;
- }
+
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
Colours[Pkg->ID] = 1;
- }
-
+
bool Recurse = _config->FindB("APT::Cache::RecurseDepends",false);
bool Installed = _config->FindB("APT::Cache::Installed",false);
bool Important = _config->FindB("APT::Cache::Important",false);
pkgCache &Cache = *GCache;
SPtrArray<unsigned> Colours = new unsigned[Cache.Head().PackageCount];
memset(Colours,0,sizeof(*Colours)*Cache.Head().PackageCount);
-
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
- {
- pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
- if (Pkg.end() == true)
- {
- _error->Warning(_("Unable to locate package %s"),*I);
- continue;
- }
+
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
Colours[Pkg->ID] = 1;
- }
-
+
bool Recurse = _config->FindB("APT::Cache::RecurseDepends",false);
bool Installed = _config->FindB("APT::Cache::Installed",false);
bool DidSomething;
return _error->Error("Write to stdout failed");
return true;
}
+
+
+/* show automatically installed packages (sorted) */
+bool ShowAuto(CommandLine &CmdL)
+{
+ OpProgress op;
+ pkgDepCache DepCache(GCache);
+ DepCache.Init(&op);
+
+ std::vector<string> packages;
+ packages.reserve(GCache->HeaderP->PackageCount / 3);
+
+ for (pkgCache::PkgIterator P = GCache->PkgBegin(); P.end() == false; P++)
+ if (DepCache[P].Flags & pkgCache::Flag::Auto)
+ packages.push_back(P.Name());
+
+ std::sort(packages.begin(), packages.end());
+
+ for (vector<string>::iterator I = packages.begin(); I != packages.end(); I++)
+ cout << *I << "\n";
+
+ return true;
+}
/*}}}*/
// ShowPackage - Dump the package record to the screen /*{{{*/
// ---------------------------------------------------------------------
pkgCache &Cache = *GCache;
pkgDepCache::Policy Plcy;
- unsigned found = 0;
-
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
{
- // FIXME: Handle the case in which pkgname name:arch is not found
- pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
- if (Pkg.end() == true)
- {
- Pkg = Cache.FindPkg(*I, "any");
- if (Pkg.end() == true) {
- _error->Warning(_("Unable to locate package %s"),*I);
- continue;
- }
- }
-
- ++found;
-
// Find the proper version to use.
if (_config->FindB("APT::Cache::AllVersions","true") == true)
{
}
}
- if (found > 0)
+ if (pkgset.empty() == false)
return true;
return _error->Error(_("No packages found"));
}
if (_error->PendingError() == true)
return false;
+ unsigned found = 0;
for (const char **I = CmdL.FileList + 1; *I != 0; I++)
{
SrcRecs.Restart();
pkgSrcRecords::Parser *Parse;
- while ((Parse = SrcRecs.Find(*I,false)) != 0)
- cout << Parse->AsStr() << endl;;
+ unsigned found_this = 0;
+ while ((Parse = SrcRecs.Find(*I,false)) != 0) {
+ cout << Parse->AsStr() << endl;;
+ found++;
+ found_this++;
+ }
+ if (found_this == 0) {
+ _error->Warning(_("Unable to locate package %s"),*I);
+ continue;
+ }
}
- return true;
+ if (found > 0)
+ return true;
+ return _error->Error(_("No packages found"));
}
/*}}}*/
// Policy - Show the results of the preferences file /*{{{*/
}
string const myArch = _config->Find("APT::Architecture");
+ char const * const msgInstalled = _(" Installed: ");
+ char const * const msgCandidate = _(" Candidate: ");
+ short const InstalledLessCandidate =
+ mbstowcs(NULL, msgInstalled, 0) - mbstowcs(NULL, msgCandidate, 0);
+ short const deepInstalled =
+ (InstalledLessCandidate < 0 ? (InstalledLessCandidate*-1) : 0) - 1;
+ short const deepCandidate =
+ (InstalledLessCandidate > 0 ? (InstalledLessCandidate) : 0) - 1;
// Print out detailed information for each package
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator I = pkgset.begin(); I != pkgset.end(); ++I)
{
- pkgCache::GrpIterator Grp = Cache.FindGrp(*I);
- pkgCache::PkgIterator Pkg = Grp.FindPkg("any");
- if (Pkg.end() == true)
- {
- _error->Warning(_("Unable to locate package %s"),*I);
- continue;
- }
+ pkgCache::PkgIterator Pkg = I.Group().FindPkg("any");
- for (; Pkg.end() != true; Pkg = Grp.NextPkg(Pkg)) {
+ for (; Pkg.end() != true; Pkg = I.Group().NextPkg(Pkg)) {
if (strcmp(Pkg.Arch(),"all") == 0)
continue;
cout << Pkg.FullName(true) << ":" << endl;
// Installed version
- cout << _(" Installed: ");
+ cout << msgInstalled << OutputInDepth(deepInstalled, " ");
if (Pkg->CurrentVer == 0)
cout << _("(none)") << endl;
else
cout << Pkg.CurrentVer().VerStr() << endl;
// Candidate Version
- cout << _(" Candidate: ");
+ cout << msgCandidate << OutputInDepth(deepCandidate, " ");
pkgCache::VerIterator V = Plcy.GetCandidateVer(Pkg);
if (V.end() == true)
cout << _("(none)") << endl;
if (_error->PendingError() == true)
_error->Discard();
- for (const char **I = CmdL.FileList + 1; *I != 0; I++)
+ APT::PackageSet pkgset = APT::PackageSet::FromCommandLine(Cache, CmdL.FileList);
+ for (APT::PackageSet::const_iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
{
- pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
-
if (Pkg.end() == false)
{
for (pkgCache::VerIterator V = Pkg.VersionList(); V.end() == false; V++)
SrcRecs.Restart();
pkgSrcRecords::Parser *SrcParser;
- while ((SrcParser = SrcRecs.Find(*I,false)) != 0)
+ while ((SrcParser = SrcRecs.Find(Pkg.Name(),false)) != 0)
{
// Maybe support Release info here too eventually
cout << setw(10) << SrcParser->Package() << " | "
" unmet - Show unmet dependencies\n"
" search - Search the package list for a regex pattern\n"
" show - Show a readable record for the package\n"
+ " showauto - Display a list of automatically installed packages\n"
" depends - Show raw dependency information for a package\n"
" rdepends - Show reverse dependency information for a package\n"
" pkgnames - List the names of all packages in the system\n"
{"xvcg",&XVcg},
{"show",&ShowPackage},
{"pkgnames",&ShowPkgNames},
+ {"showauto",&ShowAuto},
{"policy",&Policy},
{"madison",&Madison},
{0,0}};