+ if (Pkg.CurrentVer() == V)
+ cout << " *** " << V.VerStr();
+ else
+ cout << " " << V.VerStr();
+ cout << " " << Plcy.GetPriority(Pkg) << endl;
+ for (pkgCache::VerFileIterator VF = V.FileList(); VF.end() == false; VF++)
+ {
+ // Locate the associated index files so we can derive a description
+ pkgIndexFile *Indx;
+ if (SrcList->FindIndex(VF.File(),Indx) == false &&
+ _system->FindIndex(VF.File(),Indx) == false)
+ return _error->Error(_("Cache is out of sync, can't x-ref a package file"));
+ printf(_(" %4i %s\n"),Plcy.GetPriority(VF.File()),
+ Indx->Describe(true).c_str());
+ }
+ }
+ }
+
+ return true;
+}
+ /*}}}*/
+// GenCaches - Call the main cache generator /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool GenCaches(CommandLine &Cmd)
+{
+ OpTextProgress Progress(*_config);
+
+ pkgSourceList List;
+ if (List.ReadMainList() == false)
+ return false;
+ return pkgMakeStatusCache(List,Progress);
+}
+ /*}}}*/
+// ShowHelp - Show a help screen /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+bool ShowHelp(CommandLine &Cmd)
+{
+ ioprintf(cout,_("%s %s for %s %s compiled on %s %s\n"),PACKAGE,VERSION,
+ COMMON_OS,COMMON_CPU,__DATE__,__TIME__);
+
+ cout <<
+ _("Usage: apt-cache [options] command\n"
+ " apt-cache [options] add file1 [file1 ...]\n"
+ " apt-cache [options] showpkg pkg1 [pkg2 ...]\n"
+ " apt-cache [options] showsrc pkg1 [pkg2 ...]\n"
+ "\n"
+ "apt-cache is a low-level tool used to manipulate APT's binary\n"
+ "cache files, and query information from them\n"
+ "\n"
+ "Commands:\n"
+ " add - Add an package file to the source cache\n"
+ " gencaches - Build both the package and source cache\n"
+ " showpkg - Show some general information for a single package\n"
+ " showsrc - Show source records\n"
+ " stats - Show some basic statistics\n"
+ " dump - Show the entire file in a terse form\n"
+ " dumpavail - Print an available file to stdout\n"
+ " unmet - Show unmet dependencies\n"
+ " search - Search the package list for a regex pattern\n"
+ " show - Show a readable record for the package\n"
+ " depends - Show raw dependency information for a package\n"
+ " pkgnames - List the names of all packages\n"
+ " dotty - Generate package graphs for GraphVis\n"
+ " policy - Show policy settings\n"
+ "\n"
+ "Options:\n"
+ " -h This help text.\n"
+ " -p=? The package cache.\n"
+ " -s=? The source cache.\n"
+ " -q Disable progress indicator.\n"
+ " -i Show only important deps for the unmet command.\n"
+ " -c=? Read this configuration file\n"
+ " -o=? Set an arbitary configuration option, eg -o dir::cache=/tmp\n"
+ "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n");
+ return true;
+}
+ /*}}}*/
+// CacheInitialize - Initialize things for apt-cache /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void CacheInitialize()
+{
+ _config->Set("quiet",0);
+ _config->Set("help",false);
+}
+ /*}}}*/
+
+int main(int argc,const char *argv[])
+{
+ CommandLine::Args Args[] = {
+ {'h',"help","help",0},
+ {'v',"version","version",0},
+ {'p',"pkg-cache","Dir::Cache::pkgcache",CommandLine::HasArg},
+ {'s',"src-cache","Dir::Cache::srcpkgcache",CommandLine::HasArg},
+ {'q',"quiet","quiet",CommandLine::IntLevel},
+ {'i',"important","APT::Cache::Important",0},
+ {'f',"full","APT::Cache::ShowFull",0},
+ {'g',"generate","APT::Cache::Generate",0},
+ {'a',"all-versions","APT::Cache::AllVersions",0},
+ {0,"names-only","APT::Cache::NamesOnly",0},
+ {0,"all-names","APT::Cache::AllNames",0},
+ {0,"recurse","APT::Cache::RecurseDepends",0},
+ {'c',"config-file",0,CommandLine::ConfigFile},
+ {'o',"option",0,CommandLine::ArbItem},
+ {0,0,0,0}};
+ CommandLine::Dispatch CmdsA[] = {{"help",&ShowHelp},
+ {"add",&DoAdd},
+ {"gencaches",&GenCaches},
+ {"showsrc",&ShowSrcPackage},
+ {0,0}};
+ CommandLine::Dispatch CmdsB[] = {{"showpkg",&DumpPackage},
+ {"stats",&Stats},
+ {"dump",&Dump},
+ {"dumpavail",&DumpAvail},
+ {"unmet",&UnMet},
+ {"search",&Search},
+ {"depends",&Depends},
+ {"dotty",&Dotty},
+ {"show",&ShowPackage},
+ {"pkgnames",&ShowPkgNames},
+ {"policy",&Policy},
+ {0,0}};
+
+ CacheInitialize();
+
+ // Set up gettext support
+ setlocale(LC_ALL,"");
+ textdomain(PACKAGE);
+
+ // Parse the command line and initialize the package library
+ CommandLine CmdL(Args,_config);
+ if (pkgInitConfig(*_config) == false ||
+ CmdL.Parse(argc,argv) == false ||
+ pkgInitSystem(*_config,_system) == false)
+ {
+ _error->DumpErrors();
+ return 100;
+ }
+
+ // See if the help should be shown
+ if (_config->FindB("help") == true ||
+ CmdL.FileSize() == 0)
+ {
+ ShowHelp(CmdL);
+ return 0;
+ }
+
+ // Deal with stdout not being a tty
+ if (ttyname(STDOUT_FILENO) == 0 && _config->FindI("quiet",0) < 1)
+ _config->Set("quiet","1");
+
+ if (CmdL.DispatchArg(CmdsA,false) == false && _error->PendingError() == false)
+ {
+ MMap *Map = 0;
+ if (_config->FindB("APT::Cache::Generate",true) == false)
+ {
+ Map = new MMap(*new FileFd(_config->FindFile("Dir::Cache::pkgcache"),
+ FileFd::ReadOnly),MMap::Public|MMap::ReadOnly);
+ }
+ else
+ {
+ // Open the cache file
+ SrcList = new pkgSourceList;
+ SrcList->ReadMainList();
+
+ // Generate it and map it
+ OpProgress Prog;
+ pkgMakeStatusCache(*SrcList,Prog,&Map,true);