diff options
author | Arch Librarian <arch@canonical.com> | 2004-09-20 16:54:19 +0000 |
---|---|---|
committer | Arch Librarian <arch@canonical.com> | 2004-09-20 16:54:19 +0000 |
commit | 349cd3b8dbb1e218b31443be55933b01042c4acf (patch) | |
tree | 756c95331ad46dd0609f966a260e87ecf4519b28 | |
parent | 1089ca897591b5b493b0085d37bec18017614bdd (diff) |
Added a depends option to apt-cache
Author: jgg
Date: 1999-07-15 03:15:48 GMT
Added a depends option to apt-cache
-rw-r--r-- | apt-pkg/contrib/mmap.h | 7 | ||||
-rw-r--r-- | apt-pkg/pkgcache.h | 97 | ||||
-rw-r--r-- | apt-pkg/pkgcachegen.cc | 8 | ||||
-rw-r--r-- | apt-pkg/pkgcachegen.h | 4 | ||||
-rw-r--r-- | cmdline/apt-cache.cc | 60 | ||||
-rw-r--r-- | doc/apt-cache.8.yo | 4 |
6 files changed, 121 insertions, 59 deletions
diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index 0c11d3202..d086e51ab 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: mmap.h,v 1.9 1999/04/18 06:36:36 jgg Exp $ +// $Id: mmap.h,v 1.10 1999/07/15 03:15:49 jgg Exp $ /* ###################################################################### MMap Class - Provides 'real' mmap or a faked mmap using read(). @@ -32,6 +32,11 @@ #include <string> #include <apt-pkg/fileutl.h> +/* This should be a 32 bit type, larger tyes use too much ram and smaller + types are too small. Where ever possible 'unsigned long' should be used + instead of this internal type */ +typedef unsigned int map_ptrloc; + class MMap { protected: diff --git a/apt-pkg/pkgcache.h b/apt-pkg/pkgcache.h index f7349c7a1..a1e17a878 100644 --- a/apt-pkg/pkgcache.h +++ b/apt-pkg/pkgcache.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: pkgcache.h,v 1.20 1999/05/23 22:55:54 jgg Exp $ +// $Id: pkgcache.h,v 1.21 1999/07/15 03:15:48 jgg Exp $ /* ###################################################################### Cache - Structure definitions for the cache file @@ -28,11 +28,6 @@ #include <time.h> #include <apt-pkg/mmap.h> -/* This should be a 32 bit type, larger tyes use too much ram and smaller - types are too small. Where ever possible 'unsigned long' should be used - instead of this internal type */ -typedef unsigned int __apt_ptrloc; - class pkgCache { public: @@ -157,8 +152,8 @@ struct pkgCache::Header unsigned long ProvidesCount; // Offsets - __apt_ptrloc FileList; // struct PackageFile - __apt_ptrloc StringList; // struct StringItem + map_ptrloc FileList; // struct PackageFile + map_ptrloc StringList; // struct StringItem unsigned long MaxVerFileSize; /* Allocation pools, there should be one of these for each structure @@ -166,7 +161,7 @@ struct pkgCache::Header DynamicMMap::Pool Pools[7]; // Rapid package name lookup - __apt_ptrloc HashTable[2*1048]; + map_ptrloc HashTable[2*1048]; bool CheckSizes(Header &Against) const; Header(); @@ -175,17 +170,17 @@ struct pkgCache::Header struct pkgCache::Package { // Pointers - __apt_ptrloc Name; // Stringtable - __apt_ptrloc VersionList; // Version - __apt_ptrloc TargetVer; // Version - __apt_ptrloc CurrentVer; // Version - __apt_ptrloc TargetDist; // StringTable (StringItem) - __apt_ptrloc Section; // StringTable (StringItem) + map_ptrloc Name; // Stringtable + map_ptrloc VersionList; // Version + map_ptrloc TargetVer; // Version + map_ptrloc CurrentVer; // Version + map_ptrloc TargetDist; // StringTable (StringItem) + map_ptrloc Section; // StringTable (StringItem) // Linked list - __apt_ptrloc NextPackage; // Package - __apt_ptrloc RevDepends; // Dependency - __apt_ptrloc ProvidesList; // Provides + map_ptrloc NextPackage; // Package + map_ptrloc RevDepends; // Dependency + map_ptrloc ProvidesList; // Provides // Install/Remove/Purge etc unsigned char SelectedState; // What @@ -199,45 +194,45 @@ struct pkgCache::Package struct pkgCache::PackageFile { // Names - __apt_ptrloc FileName; // Stringtable - __apt_ptrloc Archive; // Stringtable - __apt_ptrloc Component; // Stringtable - __apt_ptrloc Version; // Stringtable - __apt_ptrloc Origin; // Stringtable - __apt_ptrloc Label; // Stringtable - __apt_ptrloc Architecture; // Stringtable + map_ptrloc FileName; // Stringtable + map_ptrloc Archive; // Stringtable + map_ptrloc Component; // Stringtable + map_ptrloc Version; // Stringtable + map_ptrloc Origin; // Stringtable + map_ptrloc Label; // Stringtable + map_ptrloc Architecture; // Stringtable unsigned long Size; unsigned long Flags; // Linked list - __apt_ptrloc NextFile; // PackageFile + map_ptrloc NextFile; // PackageFile unsigned short ID; time_t mtime; // Modification time for the file }; struct pkgCache::VerFile { - __apt_ptrloc File; // PackageFile - __apt_ptrloc NextFile; // PkgVerFile - __apt_ptrloc Offset; // File offset + map_ptrloc File; // PackageFile + map_ptrloc NextFile; // PkgVerFile + map_ptrloc Offset; // File offset unsigned short Size; }; struct pkgCache::Version { - __apt_ptrloc VerStr; // Stringtable - __apt_ptrloc Section; // StringTable (StringItem) - __apt_ptrloc Arch; // StringTable + map_ptrloc VerStr; // Stringtable + map_ptrloc Section; // StringTable (StringItem) + map_ptrloc Arch; // StringTable // Lists - __apt_ptrloc FileList; // VerFile - __apt_ptrloc NextVer; // Version - __apt_ptrloc DependsList; // Dependency - __apt_ptrloc ParentPkg; // Package - __apt_ptrloc ProvidesList; // Provides + map_ptrloc FileList; // VerFile + map_ptrloc NextVer; // Version + map_ptrloc DependsList; // Dependency + map_ptrloc ParentPkg; // Package + map_ptrloc ProvidesList; // Provides - __apt_ptrloc Size; // These are the .deb size - __apt_ptrloc InstalledSize; + map_ptrloc Size; // These are the .deb size + map_ptrloc InstalledSize; unsigned short Hash; unsigned short ID; unsigned char Priority; @@ -245,11 +240,11 @@ struct pkgCache::Version struct pkgCache::Dependency { - __apt_ptrloc Version; // Stringtable - __apt_ptrloc Package; // Package - __apt_ptrloc NextDepends; // Dependency - __apt_ptrloc NextRevDepends; // Dependency - __apt_ptrloc ParentVer; // Version + map_ptrloc Version; // Stringtable + map_ptrloc Package; // Package + map_ptrloc NextDepends; // Dependency + map_ptrloc NextRevDepends; // Dependency + map_ptrloc ParentVer; // Version // Specific types of depends unsigned char Type; @@ -259,17 +254,17 @@ struct pkgCache::Dependency struct pkgCache::Provides { - __apt_ptrloc ParentPkg; // Pacakge - __apt_ptrloc Version; // Version - __apt_ptrloc ProvideVersion; // Stringtable - __apt_ptrloc NextProvides; // Provides - __apt_ptrloc NextPkgProv; // Provides + map_ptrloc ParentPkg; // Pacakge + map_ptrloc Version; // Version + map_ptrloc ProvideVersion; // Stringtable + map_ptrloc NextProvides; // Provides + map_ptrloc NextPkgProv; // Provides }; struct pkgCache::StringItem { - __apt_ptrloc String; // Stringtable - __apt_ptrloc NextItem; // StringItem + map_ptrloc String; // Stringtable + map_ptrloc NextItem; // StringItem }; #include <apt-pkg/cacheiterators.h> diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc index 804c59a48..478778946 100644 --- a/apt-pkg/pkgcachegen.cc +++ b/apt-pkg/pkgcachegen.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: pkgcachegen.cc,v 1.39 1999/06/04 05:54:20 jgg Exp $ +// $Id: pkgcachegen.cc,v 1.40 1999/07/15 03:15:48 jgg Exp $ /* ###################################################################### Package Cache Generator - Generator for the cache structure. @@ -99,7 +99,7 @@ bool pkgCacheGenerator::MergeList(ListParser &List) } pkgCache::VerIterator Ver = Pkg.VersionList(); - __apt_ptrloc *Last = &Pkg->VersionList; + map_ptrloc *Last = &Pkg->VersionList; int Res = 1; for (; Ver.end() == false; Last = &Ver->NextVer, Ver++) { @@ -197,7 +197,7 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver, VF->File = CurrentFile - Cache.PkgFileP; // Link it to the end of the list - __apt_ptrloc *Last = &Ver->FileList; + map_ptrloc *Last = &Ver->FileList; for (pkgCache::VerFileIterator V = Ver.FileList(); V.end() == false; V++) Last = &V->NextFile; VF->NextFile = *Last; @@ -387,7 +387,7 @@ unsigned long pkgCacheGenerator::WriteUniqString(const char *S, // Search for an insertion point pkgCache::StringItem *I = Cache.StringItemP + Cache.HeaderP->StringList; int Res = 1; - __apt_ptrloc *Last = &Cache.HeaderP->StringList; + map_ptrloc *Last = &Cache.HeaderP->StringList; for (; I != Cache.StringItemP; Last = &I->NextItem, I = Cache.StringItemP + I->NextItem) { diff --git a/apt-pkg/pkgcachegen.h b/apt-pkg/pkgcachegen.h index 90b2e18af..2bdabcee0 100644 --- a/apt-pkg/pkgcachegen.h +++ b/apt-pkg/pkgcachegen.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: pkgcachegen.h,v 1.15 1999/05/23 22:55:54 jgg Exp $ +// $Id: pkgcachegen.h,v 1.16 1999/07/15 03:15:48 jgg Exp $ /* ###################################################################### Package Cache Generator - Generator for the cache structure. @@ -82,7 +82,7 @@ class pkgCacheGenerator::ListParser // Some cache items pkgCache::VerIterator OldDepVer; - __apt_ptrloc *OldDepLast; + map_ptrloc *OldDepLast; protected: diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index de5fc615b..12d306fc1 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: apt-cache.cc,v 1.36 1999/05/14 02:51:36 jgg Exp $ +// $Id: apt-cache.cc,v 1.37 1999/07/15 03:15:49 jgg Exp $ /* ###################################################################### apt-cache - Manages the cache files @@ -379,6 +379,62 @@ bool DumpAvail(CommandLine &Cmd) return true; } /*}}}*/ +// Depends - Print out a dependency tree /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool Depends(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; + } + + pkgCache::VerIterator Ver = Pkg.VersionList(); + if (Ver.end() == true) + { + cout << '<' << Pkg.Name() << '>' << endl; + continue; + } + + cout << Pkg.Name() << endl; + + for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; D++) + { + if ((D->CompareOp & pkgCache::Dep::Or) == pkgCache::Dep::Or) + cout << " |"; + else + cout << " "; + + // Show the package + pkgCache::PkgIterator Trg = D.TargetPkg(); + if (Trg->VersionList == 0) + cout << D.DepType() << ": <" << Trg.Name() << ">" << endl; + else + cout << D.DepType() << ": " << Trg.Name() << endl; + + // Display all solutions + pkgCache::Version **List = D.AllTargets(); + for (pkgCache::Version **I = List; *I != 0; I++) + { + pkgCache::VerIterator V(Cache,*I); + if (V != Cache.VerP + V.ParentPkg()->VersionList || + V->ParentPkg == D->Package) + continue; + cout << " " << V.ParentPkg().Name() << endl; + } + delete [] List; + } + } + + return true; +} + /*}}}*/ // DoAdd - Perform an adding operation /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -582,6 +638,7 @@ bool ShowHelp(CommandLine &Cmd) cout << " check - Check the cache a bit" << endl; cout << " search - Search the package list for a regex pattern" << endl; cout << " show - Show a readable record for the package" << endl; + cout << " depends - Show raw dependency information for a package" << endl; cout << endl; cout << "Options:" << endl; cout << " -h This help text." << endl; @@ -630,6 +687,7 @@ int main(int argc,const char *argv[]) {"unmet",&UnMet}, {"check",&Check}, {"search",&Search}, + {"depends",&Depends}, {"show",&ShowPackage}, {0,0}}; diff --git a/doc/apt-cache.8.yo b/doc/apt-cache.8.yo index 123f41dc2..9b6861f3d 100644 --- a/doc/apt-cache.8.yo +++ b/doc/apt-cache.8.yo @@ -154,6 +154,10 @@ description. If --full is given then output identical to bf(show) is produced for each matched package and if --names-only is given then the long description is not searched, only the package name is. +dit(bf(depends)) +bf(depends) shows a listing of each dependency a package has and all +the possible other packages that can fullfill that dependency. + enddit() manpageoptions() |