]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Refactor find_update_seeds
authorMichael Schroeder <mls@suse.de>
Thu, 5 Oct 2017 10:54:26 +0000 (12:54 +0200)
committerMichael Schroeder <mls@suse.de>
Thu, 5 Oct 2017 10:54:26 +0000 (12:54 +0200)
src/cleandeps.c

index 6a1960a55173e53fa236570ec157592c0f0d3877..2c73996227a5069820a2d6030473f4f54a9f5aef 100644 (file)
@@ -558,6 +558,72 @@ queue_contains(Queue *q, Id id)
   return 0;
 }
 
+static void
+find_update_seeds(Solver *solv, Queue *updatepkgs_filtered, Map *userinstalled)
+{
+  Pool *pool = solv->pool;
+  Repo *installed = solv->installed;
+  Queue *cleandeps_updatepkgs = solv->cleandeps_updatepkgs;
+  int i, j;
+  Id p;
+
+  queue_prealloc(updatepkgs_filtered, cleandeps_updatepkgs->count);
+  for (i = 0; i < cleandeps_updatepkgs->count; i++)
+    {
+      p = cleandeps_updatepkgs->elements[i];
+      if (pool->solvables[p].repo == installed)
+       {
+#ifdef ENABLE_LINKED_PKGS
+         const char *name = pool_id2str(pool, pool->solvables[p].name);
+         if (strncmp(name, "pattern:", 8) == 0 || strncmp(name, "application:", 12) == 0)
+           continue;
+#endif
+         queue_push(updatepkgs_filtered, p);
+       }
+    }
+#ifdef CLEANDEPSDEBUG
+  printf("SEEDS IN (%d)\n", updatepkgs_filtered->count);
+  for (i = 0; i < updatepkgs_filtered->count; i++)
+    printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered->elements[i]));
+#endif
+  filter_unneeded(solv, updatepkgs_filtered, 0, 1);
+#ifdef CLEANDEPSDEBUG
+  printf("SEEDS OUT (%d)\n", updatepkgs_filtered->count);
+  for (i = 0; i < updatepkgs_filtered->count; i++)
+    printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered->elements[i]));
+#endif
+  /* make sure userinstalled packages are in the seeds */
+  for (i = j = 0; i < updatepkgs_filtered->count; i++)
+    {
+      p = updatepkgs_filtered->elements[i];
+      if (!MAPTST(userinstalled, p - installed->start))
+       updatepkgs_filtered->elements[j++] = p;
+    }
+  queue_truncate(updatepkgs_filtered, j);
+  for (i = 0; i < cleandeps_updatepkgs->count; i++)
+    {
+      p = cleandeps_updatepkgs->elements[i];
+      if (pool->solvables[p].repo == installed)
+       {
+#ifdef ENABLE_LINKED_PKGS
+         const char *name = pool_id2str(pool, pool->solvables[p].name);
+         if (strncmp(name, "pattern:", 8) == 0 || strncmp(name, "application:", 12) == 0)
+           {
+             queue_push(updatepkgs_filtered, p);
+             continue;
+           }
+#endif
+         if (MAPTST(userinstalled, p - installed->start))
+           queue_push(updatepkgs_filtered, p);
+       }
+    }
+#ifdef CLEANDEPSDEBUG
+  printf("SEEDS FINAL\n");
+  for (i = 0; i < updatepkgs_filtered->count; i++)
+    printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered->elements[i]));
+#endif
+}
+
 /*
  * Find all installed packages that are no longer
  * needed regarding the current solver job.
@@ -849,59 +915,8 @@ solver_createcleandepsmap(Solver *solv, Map *cleandepsmap, int unneeded)
   if (!unneeded && solv->cleandeps_updatepkgs)
     {
       /* find update "seeds" */
-      int j;
       queue_init(&updatepkgs_filtered);
-      queue_prealloc(&updatepkgs_filtered, solv->cleandeps_updatepkgs->count);
-      for (i = 0; i < solv->cleandeps_updatepkgs->count; i++)
-       {
-         p = solv->cleandeps_updatepkgs->elements[i];
-         if (pool->solvables[p].repo == installed)
-           {
-#ifdef ENABLE_LINKED_PKGS
-             const char *name = pool_id2str(pool, pool->solvables[p].name);
-             if (strncmp(name, "pattern:", 8) == 0 || strncmp(name, "application:", 12) == 0)
-               continue;
-#endif
-             queue_push(&updatepkgs_filtered, p);
-           }
-       }
-      printf("SEEDS IN (%d)\n", updatepkgs_filtered.count);
-      for (i = 0; i < updatepkgs_filtered.count; i++)
-        printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered.elements[i]));
-      filter_unneeded(solv, &updatepkgs_filtered, 0, 1);
-      printf("SEEDS OUT (%d)\n", updatepkgs_filtered.count);
-      for (i = 0; i < updatepkgs_filtered.count; i++)
-        printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered.elements[i]));
-      /* make sure userinstalled packages are in the seeds */
-      for (i = j = 0; i < updatepkgs_filtered.count; i++)
-       {
-         p = updatepkgs_filtered.elements[i];
-         if (!MAPTST(&userinstalled, p - installed->start))
-           updatepkgs_filtered.elements[j++] = p;
-       }
-      queue_truncate(&updatepkgs_filtered, j);
-      for (i = 0; i < solv->cleandeps_updatepkgs->count; i++)
-       {
-         p = solv->cleandeps_updatepkgs->elements[i];
-         if (pool->solvables[p].repo == installed)
-           {
-#ifdef ENABLE_LINKED_PKGS
-             const char *name = pool_id2str(pool, pool->solvables[p].name);
-             if (strncmp(name, "pattern:", 8) == 0 || strncmp(name, "application:", 12) == 0)
-               {
-                 queue_push(&updatepkgs_filtered, p);
-                 continue;
-               }
-#endif
-             if (MAPTST(&userinstalled, p - installed->start))
-               queue_push(&updatepkgs_filtered, p);
-           }
-       }
-#ifdef CLEANDEPSDEBUG
-      printf("UPDATE SEEDS\n");
-      for (i = 0; i < updatepkgs_filtered.count; i++)
-        printf("  - %s\n", pool_solvid2str(pool, updatepkgs_filtered.elements[i]));
-#endif
+      find_update_seeds(solv, &updatepkgs_filtered, &userinstalled);
     }
 
 #ifdef CLEANDEPSDEBUG