From: Michael Schroeder Date: Tue, 11 Oct 2016 12:52:31 +0000 (+0200) Subject: Add "autoinst" functionality X-Git-Tag: 0.6.24~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84e03221ed51e027907794fe89c0d5260951f6c8;p=thirdparty%2Flibsolv.git Add "autoinst" functionality Needed when we can't invert the list in advance, e.g. when converting libzypp testcases. --- diff --git a/ext/testcase.c b/ext/testcase.c index d4640de4..a56c4dbf 100644 --- a/ext/testcase.c +++ b/ext/testcase.c @@ -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);