Imported Upstream version 0.6.5
[platform/upstream/libsolv.git] / ext / testcase.c
index 3da7aff..fa9c807 100644 (file)
@@ -105,6 +105,7 @@ static struct solverflags2str {
   { SOLVER_FLAG_KEEP_ORPHANS,               "keeporphans", 0 },
   { SOLVER_FLAG_BREAK_ORPHANS,              "breakorphans", 0 },
   { SOLVER_FLAG_FOCUS_INSTALLED,            "focusinstalled", 0 },
+  { SOLVER_FLAG_YUM_OBSOLETES,              "yumobsoletes", 0 },
   { 0, 0, 0 }
 };
 
@@ -1728,6 +1729,18 @@ testcase_write(Solver *solv, char *dir, int resultflags, const char *testcasenam
        }
     }
 
+  /* dump disabled packages (must come before the namespace/job lines) */
+  if (pool->considered)
+    {
+      Id p;
+      FOR_POOL_SOLVABLES(p)
+       if (!MAPTST(pool->considered, p))
+         {
+           cmd = pool_tmpjoin(pool, "disable pkg ", testcase_solvid2str(pool, p), 0);
+           strqueue_push(&sq, cmd);
+         }
+    }
+
   s = testcase_getsolverflags(solv);
   if (*s)
     {
@@ -2116,7 +2129,7 @@ testcase_read(Pool *pool, FILE *fp, char *testcase, Queue *job, char **resultp,
        {
          char *sp;
          Id how, what;
-         if (!prepared)
+         if (prepared <= 0)
            {
              pool_addfileprovides(pool);
              pool_createwhatprovides(pool);
@@ -2162,7 +2175,7 @@ testcase_read(Pool *pool, FILE *fp, char *testcase, Queue *job, char **resultp,
              for (i = 2; i < npieces; i++)
                queue_push(&q, testcase_str2solvid(pool, pieces[i]));
              /* now do the callback */
-             if (!prepared)
+             if (prepared <= 0)
                {
                  pool_addfileprovides(pool);
                  pool_createwhatprovides(pool);
@@ -2227,6 +2240,29 @@ testcase_read(Pool *pool, FILE *fp, char *testcase, Queue *job, char **resultp,
        {
          break;
        }
+      else if (!strcmp(pieces[0], "disable") && npieces == 3)
+       {
+         Id p;
+         if (strcmp(pieces[1], "pkg"))
+           {
+             pool_debug(pool, SOLV_ERROR, "testcase_read: bad disable type '%s'\n", pieces[1]);
+             continue;
+           }
+         if (!prepared)
+           pool_createwhatprovides(pool);
+         prepared = -1;
+         if (!pool->considered)
+           {
+             pool->considered = solv_calloc(1, sizeof(Map));
+             map_init(pool->considered, pool->nsolvables);
+             map_setall(pool->considered);
+           }
+         p = testcase_str2solvid(pool, pieces[2]);
+         if (p)
+           MAPCLR(pool->considered, p);
+         else
+           pool_debug(pool, SOLV_ERROR, "disable: unknown package '%s'\n", pieces[2]);
+       }
       else
        {
          pool_debug(pool, SOLV_ERROR, "testcase_read: cannot parse command '%s'\n", pieces[0]);