Fix support for purging packages
authorMichael Spang <mspang@csclub.uwaterloo.ca>
Mon, 21 Dec 2009 03:32:40 +0000 (22:32 -0500)
committerMichael Spang <mspang@csclub.uwaterloo.ca>
Tue, 22 Dec 2009 03:21:07 +0000 (22:21 -0500)
Signed-off-by: Michael Spang <mspang@csclub.uwaterloo.ca>
inapt.cc
util.cc
util.h

index 984ca8a..e40bdae 100644 (file)
--- a/inapt.cc
+++ b/inapt.cc
@@ -90,10 +90,12 @@ bool run_install(pkgCacheFile &cache) {
 
 void run_autoremove(pkgCacheFile &cache)
 {
+    bool purge = _config->FindB("Inapt::Purge", false);
+
     for (pkgCache::PkgIterator i = cache->PkgBegin(); !i.end(); i++) {
         if (cache[i].Garbage) {
             debug("autoremove: %s", i.Name());
-            cache->MarkDelete(i, 0);
+            cache->MarkDelete(i, purge);
         }
     }
 
@@ -238,6 +240,7 @@ static void dump_actions(pkgCacheFile &cache) {
 
 static void exec_actions(std::vector<inapt_package *> *final_actions) {
     int marked = 0;
+    bool purge = _config->FindB("Inapt::Purge", false);
 
     pkgInitConfig(*_config);
     pkgInitSystem(*_config, _system);
@@ -290,10 +293,9 @@ static void exec_actions(std::vector<inapt_package *> *final_actions) {
                 }
                 break;
             case inapt_action::REMOVE:
-                if ((k.CurrentVer() && !cache[k].Delete()) || cache[k].Install()) {
+                if ((k.CurrentVer() && !cache[k].Delete()) || cache[k].Install())
                     debug("remove %s %s:%d", (*i)->pkg.Name(), (*i)->filename, (*i)->linenum);
-                    cache->MarkDelete(k, false);
-                }
+                cache->MarkDelete(k, purge);
                 break;
             default:
                 fatal("uninitialized action");
@@ -364,7 +366,7 @@ int main(int argc, char *argv[]) {
     std::set<std::string> defines;
 
     prog = xstrdup(basename(argv[0]));
-    while ((opt = getopt_long(argc, argv, "p:s", opts, NULL)) != -1) {
+    while ((opt = getopt_long(argc, argv, "p:sd", opts, NULL)) != -1) {
         switch (opt) {
             case 'p':
                 defines.insert(optarg);
@@ -381,6 +383,9 @@ int main(int argc, char *argv[]) {
             case 'u':
                 _config->Set("Inapt::Purge", true);
                 break;
+            case 'd':
+                debug_enabled = true;
+                break;
             default:
                 fatal("error parsing arguments");
         }
diff --git a/util.cc b/util.cc
index b5f6926..f73bb21 100644 (file)
--- a/util.cc
+++ b/util.cc
@@ -11,6 +11,8 @@
 
 #include "util.h"
 
+bool debug_enabled = false;
+
 static void errmsg(int prio, const char *prefix, const char *fmt, va_list args) {
     fprintf(stderr, "%s: ", prefix);
     vfprintf(stderr, fmt, args);
@@ -64,7 +66,8 @@ void notice(const char *msg, ...) {
 void debug(const char *msg, ...) {
     va_list args;
     va_start(args, msg);
-    errmsg(LOG_DEBUG, "debug", msg, args);
+    if (debug_enabled)
+        errmsg(LOG_DEBUG, "debug", msg, args);
     va_end(args);
 }
 
diff --git a/util.h b/util.h
index ba0d15c..a0ed83d 100644 (file)
--- a/util.h
+++ b/util.h
@@ -73,4 +73,6 @@ static inline char *xstrndup(const char *s, size_t n) {
     return dup;
 }
 
+extern bool debug_enabled;
+
 #endif