diff options
author | Arch Librarian <arch@canonical.com> | 2004-09-20 16:51:30 +0000 |
---|---|---|
committer | Arch Librarian <arch@canonical.com> | 2004-09-20 16:51:30 +0000 |
commit | cc718e9a50c9a0890319c08dddf5f5ce81d1c68b (patch) | |
tree | 8f4022ca24fa861f7a5efb640f979045db38e7d4 /cmdline/apt-cache.cc | |
parent | 43d017d69796a5093cb12506ec59285a34915b7f (diff) |
unmet
Author: jgg
Date: 1998-11-14 07:20:29 GMT
unmet
Diffstat (limited to 'cmdline/apt-cache.cc')
-rw-r--r-- | cmdline/apt-cache.cc | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index c62999151..063add348 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.11 1998/11/13 04:24:01 jgg Exp $ +// $Id: apt-cache.cc,v 1.12 1998/11/14 07:20:29 jgg Exp $ /* ###################################################################### apt-cache - Manages the cache files @@ -27,6 +27,86 @@ #include <config.h> /*}}}*/ +// UnMet - Show unmet dependencies /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool UnMet(pkgCache &Cache) +{ + for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; P++) + { + for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; V++) + { + bool Header = false; + for (pkgCache::DepIterator D = V.DependsList(); D.end() == false; D++) + { + // Collect or groups + pkgCache::DepIterator Start; + pkgCache::DepIterator End; + D.GlobOr(Start,End); + + // Skip everything but depends + if (End->Type != pkgCache::Dep::PreDepends && + End->Type != pkgCache::Dep::Depends && + End->Type != pkgCache::Dep::Suggests && + End->Type != pkgCache::Dep::Recommends) + continue; + + // Verify the or group + bool OK = false; + pkgCache::DepIterator RealStart = Start; + do + { + // See if this dep is Ok + pkgCache::Version **VList = Start.AllTargets(); + if (*VList != 0) + { + OK = true; + delete [] VList; + break; + } + delete [] VList; + + if (Start == End) + break; + Start++; + } + while (1); + + // The group is OK + if (OK == true) + continue; + + // Oops, it failed.. + if (Header == false) + cout << "Package " << P.Name() << " version " << + V.VerStr() << " has an unmet dep:" << endl; + Header = true; + + // Print out the dep type + cout << " " << End.DepType() << ": "; + + // Show the group + Start = RealStart; + do + { + cout << Start.TargetPkg().Name(); + if (Start.TargetVer() != 0) + cout << " (" << Start.CompType() << " " << Start.TargetVer() << + ")"; + if (Start == End) + break; + cout << " | "; + Start++; + } + while (1); + + cout << endl; + } + } + } + return true; +} + /*}}}*/ // DumpPackage - Show a dump of a package record /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -301,6 +381,7 @@ int ShowHelp() cout << " stats - Show some basic statistics" << endl; cout << " dump - Show the entire file in a terse form" << endl; cout << " dumpavail - Print an available file to stdout" << endl; + cout << " unmet - Show unmet dependencies" << endl; cout << endl; cout << "Options:" << endl; cout << " -h This help text." << endl; @@ -400,6 +481,12 @@ int main(int argc,const char *argv[]) DumpAvail(Cache); break; } + + if (strcmp(CmdL.FileList[0],"unmet") == 0) + { + UnMet(Cache); + break; + } _error->Error("Invalid operation %s", CmdL.FileList[0]); break; |