Added a depends option to apt-cache
authorArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:54:19 +0000 (16:54 +0000)
committerArch Librarian <arch@canonical.com>
Mon, 20 Sep 2004 16:54:19 +0000 (16:54 +0000)
Author: jgg
Date: 1999-07-15 03:15:48 GMT
Added a depends option to apt-cache

apt-pkg/contrib/mmap.h
apt-pkg/pkgcache.h
apt-pkg/pkgcachegen.cc
apt-pkg/pkgcachegen.h
cmdline/apt-cache.cc
doc/apt-cache.8.yo

index 0c11d32..d086e51 100644 (file)
@@ -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().
 #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:
index f7349c7..a1e17a8 100644 (file)
@@ -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
 #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>
index 804c59a..4787789 100644 (file)
@@ -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)
    {
index 90b2e18..2bdabce 100644 (file)
@@ -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:
 
index de5fc61..12d306f 100644 (file)
@@ -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
@@ -376,6 +376,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;
 }
                                                                        /*}}}*/
@@ -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}};
 
index 123f41d..9b6861f 100644 (file)
@@ -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()