]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Add "autoinst" functionality
authorMichael Schroeder <mls@suse.de>
Tue, 11 Oct 2016 12:52:31 +0000 (14:52 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 11 Oct 2016 12:52:31 +0000 (14:52 +0200)
Needed when we can't invert the list in advance, e.g. when converting
libzypp testcases.

ext/testcase.c

index d4640de4b5fe1ee693596c4a9217c46e5c9d5915..a56c4dbf372eff13826d272b467ab73a87464360 100644 (file)
@@ -2507,6 +2507,7 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
   int missing_features = 0;
   Id *genid = 0;
   int ngenid = 0;
+  Queue autoinstq;
 
   if (!fp && !(fp = fopen(testcase, "r")))
     {
@@ -2522,6 +2523,7 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
   buf = solv_malloc(bufl);
   bufp = buf;
   solv = 0;
+  queue_init(&autoinstq);
   for (;;)
     {
       if (bufp - buf + 16 > bufl)
@@ -2876,6 +2878,15 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
            }
          genid[ngenid++] = id;
        }
+      else if (!strcmp(pieces[0], "autoinst") && npieces > 2)
+       {
+         if (strcmp(pieces[1], "name"))
+           {
+             pool_debug(pool, SOLV_ERROR, "testcase_read: autoinst: illegal mode\n");
+             break;
+           }
+         queue_push(&autoinstq, pool_str2id(pool, pieces[2], 1));
+       }
       else
        {
          pool_debug(pool, SOLV_ERROR, "testcase_read: cannot parse command '%s'\n", pieces[0]);
@@ -2883,6 +2894,9 @@ testcase_read(Pool *pool, FILE *fp, const char *testcase, Queue *job, char **res
     }
   while (job && ngenid > 0)
     queue_push2(job, SOLVER_NOOP | SOLVER_SOLVABLE_PROVIDES, genid[--ngenid]);
+  if (autoinstq.count)
+    pool_add_userinstalled_jobs(pool, &autoinstq, job, GET_USERINSTALLED_NAMES | GET_USERINSTALLED_INVERTED);
+  queue_free(&autoinstq);
   genid = solv_free(genid);
   buf = solv_free(buf);
   pieces = solv_free(pieces);