// cmdline_show_broken.cc // // Copyright 2004 Daniel Burrows #include "cmdline_show_broken.h" #include "cmdline_common.h" #include #include #include #include #include using namespace std; void show_broken_deps(pkgCache::PkgIterator pkg) { const unsigned int indent=pkg.FullName(true).size() + 3; bool is_first_dep=true; pkgCache::VerIterator ver=(*apt_cache_file)[pkg].InstVerIter(*apt_cache_file); cout << " " << pkg.FullName(true) << " :"; if(ver.end() == true) { cout << endl; return; } for(pkgCache::DepIterator dep=ver.DependsList(); !dep.end(); ++dep) { pkgCache::DepIterator first=dep, prev=dep; while(dep->CompareOp & pkgCache::Dep::Or) ++dep; // Yep, it's broken. if(dep.IsCritical() && !((*apt_cache_file)[dep]&pkgDepCache::DepGInstall)) { bool is_first_of_or=true; // Iterate over the OR group, print out the information. do { if(!is_first_dep) for(unsigned int i=0; iPkgBegin(); !i.end(); ++i) { if((*apt_cache_file)[i].InstBroken()) broken.push_back(i); } if(!broken.empty()) { printf(_("The following packages have unmet dependencies:\n")); for(pkgvector::iterator pkg=broken.begin(); pkg!=broken.end(); ++pkg) show_broken_deps(*pkg); return false; } return true; }