[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[PATCH 2/3] dpkg: factor out package-listing functions from packages()



Split packages() into bite-sized pieces.  No functional change
intended.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 src/packages.c |  124 ++++++++++++++++++++++++++++++-------------------------
 1 files changed, 68 insertions(+), 56 deletions(-)

diff --git a/src/packages.c b/src/packages.c
index 2e3c23a..f180434 100644
--- a/src/packages.c
+++ b/src/packages.c
@@ -54,16 +54,72 @@ add_to_queue(struct pkginfo *pkg)
   pkg_queue_push(&queue, pkg);
 }
 
-/*
- * Act on the packages listed in argv.
- * cipaction->arg contains the requested action (e.g., --configure)
- */
-void packages(const char *const *argv) {
+/* Fill queue with pending packages. */
+static void queue_pending(void)
+{
+  struct pkgiterator *it;
+  struct pkginfo *pkg;
+
+  it= iterpkgstart();
+  while ((pkg = iterpkgnext(it)) != NULL) {
+    switch (cipaction->arg) {
+    case act_configure:
+      if (!(pkg->status == stat_unpacked ||
+            pkg->status == stat_halfconfigured ||
+            pkg->trigpend_head))
+        continue;
+      if (pkg->want != want_install)
+        continue;
+      break;
+    case act_triggers:
+      if (!pkg->trigpend_head)
+        continue;
+      if (pkg->want != want_install)
+        continue;
+      break;
+    case act_remove:
+    case act_purge:
+      if (pkg->want != want_purge) {
+        if (pkg->want != want_deinstall) continue;
+        if (pkg->status == stat_configfiles) continue;
+      }
+      if (pkg->status == stat_notinstalled)
+        continue;
+      break;
+    default:
+      internerr("unknown action '%d'", cipaction->arg);
+    }
+    add_to_queue(pkg);
+  }
+  iterpkgend(it);
+}
+
+/* Fill queue with specified packages. */
+static void queue_specified(const char *const *argv)
+{
   struct pkgiterator *it;
   struct pkginfo *pkg;
   const char *thisarg;
   size_t l;
-  
+
+  while ((thisarg = *argv++) != NULL) {
+    pkg= findpackage(thisarg);
+    if (pkg->status == stat_notinstalled) {
+      l= strlen(pkg->name);
+      if (l >= sizeof(DEBEXT) && !strcmp(pkg->name+l-sizeof(DEBEXT)+1,DEBEXT))
+        badusage(_("you must specify packages by their own names,"
+                 " not by quoting the names of the files they come in"));
+    }
+    add_to_queue(pkg);
+  }
+}
+
+/*
+ * Act on the packages listed in argv.
+ * cipaction->arg contains the requested action (e.g., --configure)
+ */
+void packages(const char *const *argv)
+{
   trigproc_install_hooks();
 
   modstatdb_init(admindir,
@@ -74,59 +130,15 @@ void packages(const char *const *argv) {
   log_message("startup packages %s", cipaction->olong);
 
   if (f_pending) {
-
     if (*argv)
-      badusage(_("--%s --pending does not take any non-option arguments"),cipaction->olong);
-
-    it= iterpkgstart();
-    while ((pkg = iterpkgnext(it)) != NULL) {
-      switch (cipaction->arg) {
-      case act_configure:
-        if (!(pkg->status == stat_unpacked ||
-              pkg->status == stat_halfconfigured ||
-              pkg->trigpend_head))
-          continue;
-        if (pkg->want != want_install)
-          continue;
-        break;
-      case act_triggers:
-        if (!pkg->trigpend_head)
-          continue;
-        if (pkg->want != want_install)
-          continue;
-        break;
-      case act_remove:
-      case act_purge:
-        if (pkg->want != want_purge) {
-          if (pkg->want != want_deinstall) continue;
-          if (pkg->status == stat_configfiles) continue;
-        }
-        if (pkg->status == stat_notinstalled)
-          continue;
-        break;
-      default:
-        internerr("unknown action '%d'", cipaction->arg);
-      }
-      add_to_queue(pkg);
-    }
-    iterpkgend(it);
-
+      badusage(_("--%s --pending does not take any non-option arguments"),
+               cipaction->olong);
+    queue_pending();
   } else {
-        
     if (!*argv)
-      badusage(_("--%s needs at least one package name argument"), cipaction->olong);
-    
-    while ((thisarg = *argv++) != NULL) {
-      pkg= findpackage(thisarg);
-      if (pkg->status == stat_notinstalled) {
-        l= strlen(pkg->name);
-        if (l >= sizeof(DEBEXT) && !strcmp(pkg->name+l-sizeof(DEBEXT)+1,DEBEXT))
-          badusage(_("you must specify packages by their own names,"
-                   " not by quoting the names of the files they come in"));
-      }
-      add_to_queue(pkg);
-    }
-
+      badusage(_("--%s needs at least one package name argument"),
+               cipaction->olong);
+    queue_specified(argv);
   }
 
   ensure_diversions();
-- 
1.7.0.4


Reply to: