{ SOLVER_ALLOWUNINSTALL, "allowuninstall" },
{ SOLVER_FAVOR, "favor" },
{ SOLVER_DISFAVOR, "disfavor" },
+ { SOLVER_BLACKLIST, "blacklist" },
{ 0, 0 }
};
{ POOL_FLAG_NOOBSOLETESMULTIVERSION, "noobsoletesmultiversion", 0 },
{ POOL_FLAG_ADDFILEPROVIDESFILTERED, "addfileprovidesfiltered", 0 },
{ POOL_FLAG_NOWHATPROVIDESAUX, "nowhatprovidesaux", 0 },
+ { POOL_FLAG_WHATPROVIDESWITHDISABLED, "whatprovideswithdisabled", 0 },
{ 0, 0, 0 }
};
{ SOLVER_RULE_LEARNT, "learnt" },
{ SOLVER_RULE_BEST, "best" },
{ SOLVER_RULE_YUMOBS, "yumobs" },
+ { SOLVER_RULE_BLACK, "black" },
{ SOLVER_RULE_RECOMMENDS, "recommends" },
{ 0, 0 }
};
for (rid = 1; rid < pool->nrels; rid++)
{
Reldep *rd = pool->rels + rid;
- if (rd->flags != REL_NAMESPACE || rd->name == NAMESPACE_OTHERPROVIDERS)
+ if (rd->flags != REL_NAMESPACE || rd->name == NAMESPACE_OTHERPROVIDERS || rd->name == NAMESPACE_SPLITPROVIDES)
continue;
/* evaluate all namespace ids, skip empty results */
d = pool_whatprovides(pool, MAKERELDEP(rid));
return 1;
}
-int
-testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname)
+const char **
+testcase_mangle_repo_names(Pool *pool)
{
- Pool *pool = solv->pool;
- int i, r, repoid;
- int mangle = 1;
- const char **orignames;
-
- /* mangle repo names so that there are no conflicts */
- orignames = solv_calloc(pool->nrepos, sizeof(char *));
- for (repoid = 1; repoid < pool->nrepos; repoid++)
+ int i, repoid, mangle = 1;
+ Repo *repo;
+ const char **names = solv_calloc(pool->nrepos, sizeof(char *));
+ FOR_REPOS(repoid, repo)
{
- Repo *repo = pool_id2repo(pool, repoid);
- char *buf = solv_malloc((repo->name ? strlen(repo->name) : 0) + 40);
- char *mp;
- orignames[repoid] = repo->name;
+ char *buf, *mp;
+ buf = solv_malloc((repo->name ? strlen(repo->name) : 0) + 40);
if (!repo->name || !repo->name[0])
sprintf(buf, "#%d", repoid);
else
strcpy(buf, repo->name);
- for (i = 0; buf[i]; i++)
- if (buf[i] == ' ' || buf[i] == '\t' || buf[i] == '/')
- buf[i] = '_';
- mp = buf + strlen(buf);
- for (;;)
- {
- for (i = 1; i < repoid; i++)
- if (!strcmp(buf, pool_id2repo(pool, i)->name))
- break;
- if (i == repoid)
- break;
+ for (mp = buf; *mp; mp++)
+ if (*mp == ' ' || *mp == '\t' || *mp == '/')
+ *mp = '_';
+ for (i = 1; i < repoid; i++)
+ {
+ if (!names[i] || strcmp(buf, names[i]) != 0)
+ continue;
sprintf(mp, "_%d", mangle++);
+ i = 0; /* restart conflict check */
}
- repo->name = buf;
+ names[repoid] = buf;
}
- r = testcase_write_mangled(solv, dir, resultflags, testcasename, resultname);
- for (repoid = 1; repoid < pool->nrepos; repoid++)
+ return names;
+}
+
+static void
+swap_repo_names(Pool *pool, const char **names)
+{
+ int repoid;
+ Repo *repo;
+ FOR_REPOS(repoid, repo)
{
- Repo *repo = pool_id2repo(pool, repoid);
- solv_free((void *)repo->name);
- repo->name = orignames[repoid];
+ const char *n = repo->name;
+ repo->name = names[repoid];
+ names[repoid] = n;
}
- solv_free(orignames);
+}
+
+int
+testcase_write(Solver *solv, const char *dir, int resultflags, const char *testcasename, const char *resultname)
+{
+ Pool *pool = solv->pool;
+ int r, repoid;
+ const char **names;
+
+ /* mangle repo names so that there are no conflicts */
+ names = testcase_mangle_repo_names(pool);
+ swap_repo_names(pool, names);
+ r = testcase_write_mangled(solv, dir, resultflags, testcasename, resultname);
+ swap_repo_names(pool, names);
+ for (repoid = 1; repoid < pool->nrepos; repoid++)
+ solv_free((void *)names[repoid]);
+ solv_free((void *)names);
return r;
}
{
char *idata = read_inline_file(fp, &buf, &bufp, &bufl);
rdata = "<inline>";
- rfp = solv_xfopen_buf(rdata, &idata, 0, "rf");
+ rfp = solv_fmemopen(idata, strlen(idata), "rf");
}
else
{