removing unused / non-existant header
[mspang/inapt.git] / inapt.cc
index 411c149..7a6c056 100644 (file)
--- a/inapt.cc
+++ b/inapt.cc
@@ -8,7 +8,6 @@
 #include <set>
 #include <apt-pkg/pkgcache.h>
 #include <apt-pkg/cachefile.h>
-#include <apt-pkg/dpkgdb.h>
 #include <apt-pkg/progress.h>
 #include <apt-pkg/init.h>
 #include <apt-pkg/error.h>
@@ -32,6 +31,7 @@ static struct option opts[] = {
     { "purge", 0, NULL, '!' },
     { "clean", 0, NULL, 'e' },
     { "option", 0, NULL, 'o' },
+    { "strict", 0, NULL, 't' },
     { NULL, 0, NULL, '\0' },
 };
 
@@ -56,9 +56,11 @@ static bool run_install(pkgCacheFile &cache) {
    if (_error->PendingError())
        return _error->Error("Unable to lock the download directory");
 
+   pkgAcquire Fetcher;
+
    unsigned int width = 80;
    AcqTextStatus status (width, 0);
-   pkgAcquire Fetcher (&status);
+   Fetcher.Setup(&status);
 
    pkgSourceList List;
    if (List.ReadMainList() == false)
@@ -171,14 +173,20 @@ static pkgCache::PkgIterator eval_pkg(inapt_package *package, pkgCacheFile &cach
 
     if (pkg.end()) {
         if (package->alternates.size() == 1) {
-            _error->Error("%s:%d: No such package: %s", package->filename, package->linenum, package->alternates[0].c_str());
+           if (_config->FindB("Inapt::Strict", false))
+                   _error->Error("%s:%d: No such package: %s", package->filename, package->linenum, package->alternates[0].c_str());
+           else
+                   _error->Warning("%s:%d: No such package: %s", package->filename, package->linenum, package->alternates[0].c_str());
         } else {
             std::vector<std::string>::iterator i = package->alternates.begin();
             std::string message = *(i++);
             while (i != package->alternates.end()) {
                 message.append(", ").append(*(i++));
             }
-            _error->Error("%s:%d: No alternative available: %s", package->filename, package->linenum, message.c_str());
+           if (_config->FindB("Inapt::Strict", false))
+                   _error->Error("%s:%d: No alternative available: %s", package->filename, package->linenum, message.c_str());
+           else
+                   _error->Warning("%s:%d: No alternative available: %s", package->filename, package->linenum, message.c_str());
         }
     }
 
@@ -263,6 +271,8 @@ static bool sanity_check(std::vector<inapt_package *> *final_actions, pkgCacheFi
     std::map<std::string, inapt_package *> packages;
 
     for (vector<inapt_package *>::iterator i = final_actions->begin(); i != final_actions->end(); i++) {
+       if ((*i)->pkg.end())
+               continue;
         if (packages.find((*i)->pkg.Name()) != packages.end()) {
             inapt_package *first = packages[(*i)->pkg.Name()];
             inapt_package *current = *i;
@@ -303,7 +313,7 @@ static void exec_actions(std::vector<inapt_package *> *final_actions) {
     OpTextProgress prog;
     pkgCacheFile cache;
 
-    if (cache.Open(prog) == false)
+    if (cache.Open(&prog, true) == false)
         return;
 
     pkgDepCache::ActionGroup group (cache);
@@ -313,10 +323,13 @@ static void exec_actions(std::vector<inapt_package *> *final_actions) {
 
     if (_error->PendingError())
         return;
+    _error->DumpErrors();
 
     // preliminary loop (auto-installs, includes recommends - could do this manually)
     for (vector<inapt_package *>::iterator i = final_actions->begin(); i < final_actions->end(); i++) {
         pkgCache::PkgIterator k = (*i)->pkg;
+       if (k.end())
+               continue;
         switch ((*i)->action) {
             case inapt_action::INSTALL:
                 if (!k.CurrentVer() || cache[k].Delete()) {
@@ -334,6 +347,8 @@ static void exec_actions(std::vector<inapt_package *> *final_actions) {
     // secondary loop (removes package and reinstalls auto-removed packages)
     for (vector<inapt_package *>::iterator i = final_actions->begin(); i < final_actions->end(); i++) {
         pkgCache::PkgIterator k = (*i)->pkg;
+       if (k.end())
+               continue;
         switch ((*i)->action) {
             case inapt_action::INSTALL:
                 if ((!k.CurrentVer() && !cache[k].Install()) || cache[k].Delete()) {
@@ -464,6 +479,9 @@ int main(int argc, char *argv[]) {
             case 'e':
                 _config->Set("Inapt::Clean", true);
                 break;
+            case 't':
+                _config->Set("Inapt::Strict", true);
+                break;
             case 'd':
                 debug_level++;
                 break;