2 * Copyright (c) 2015, SUSE LLC
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
14 #include "solverdebug.h"
16 #include "repo_rpmdb.h"
17 #include "pool_fileconflicts.h"
20 iterate_handle(Pool *pool, Id p, void *cbdata)
22 Solvable *s = pool->solvables + p;
26 if (!s->repo->rpmdbid)
28 rpmdbid = s->repo->rpmdbid[p - s->repo->start];
31 handle = rpm_byrpmdbid(cbdata, rpmdbid);
33 fprintf(stderr, "rpm_byrpmdbid: %s\n", pool_errstr(pool));
37 int main(int argc, char **argv)
44 Queue todo, conflicts;
48 if (argc == 3 && !strcmp(argv[1], "--root"))
52 pool_set_rootdir(pool, rootdir);
53 pool_setdebuglevel(pool, 1);
54 installed = repo_create(pool, "@System");
55 pool_set_installed(pool, installed);
56 if (repo_add_rpmdb(installed, 0, REPO_USE_ROOTDIR))
58 fprintf(stderr, "findfileconflicts: %s\n", pool_errstr(pool));
62 queue_init(&conflicts);
63 FOR_REPO_SOLVABLES(installed, p, s)
65 state = rpm_state_create(pool, pool_get_rootdir(pool));
66 pool_findfileconflicts(pool, &todo, 0, &conflicts, FINDFILECONFLICTS_USE_SOLVABLEFILELIST | FINDFILECONFLICTS_CHECK_DIRALIASING | FINDFILECONFLICTS_USE_ROOTDIR, &iterate_handle, state);
67 rpm_state_free(state);
69 for (i = 0; i < conflicts.count; i += 6)
71 if (conflicts.elements[i] != conflicts.elements[i + 3])
72 printf("%s - %s: %s[%s] %s[%s]\n", pool_id2str(pool, conflicts.elements[i]), pool_id2str(pool, conflicts.elements[i + 3]), pool_solvid2str(pool, conflicts.elements[i + 1]), pool_id2str(pool, conflicts.elements[i + 2]), pool_solvid2str(pool, conflicts.elements[i + 4]), pool_id2str(pool, conflicts.elements[i + 5]));
74 printf("%s: %s[%s] %s[%s]\n", pool_id2str(pool, conflicts.elements[i]), pool_solvid2str(pool, conflicts.elements[i + 1]), pool_id2str(pool, conflicts.elements[i + 2]), pool_solvid2str(pool, conflicts.elements[i + 4]), pool_id2str(pool, conflicts.elements[i + 5]));
82 pool_add_fileconflicts_deps(pool, &conflicts);
83 pool_addfileprovides(pool);
84 pool_createwhatprovides(pool);
85 pool_setdebuglevel(pool, 0);
86 Solver *solv = solver_create(pool);
87 queue_push2(&job, SOLVER_VERIFY|SOLVER_SOLVABLE_ALL, 0);
89 solver_set_flag(solv, SOLVER_FLAG_ALLOW_UNINSTALL, 1);
91 problemcnt = solver_solve(solv, &job);
93 solver_printallsolutions(solv);
96 Transaction *trans = solver_create_transaction(solv);
97 transaction_print(trans);
98 transaction_free(trans);
103 queue_free(&conflicts);