int main(int argc, char **argv) { Pool *pool; Repo *installed; Solvable *s; Id p; int i; Queue todo, conflicts; void *state = 0; pool = pool_create(); pool_setdebuglevel(pool, 1); installed = repo_create(pool, "@System"); pool_set_installed(pool, installed); if (repo_add_rpmdb(installed, 0, 0)) { fprintf(stderr, "findfileconflicts: %s\n", pool_errstr(pool)); exit(1); } queue_init(&todo); queue_init(&conflicts); FOR_REPO_SOLVABLES(installed, p, s) queue_push(&todo, p); pool_findfileconflicts(pool, &todo, 0, &conflicts, &iterate_handle, (void *)&state); queue_free(&todo); for (i = 0; i < conflicts.count; i += 5) 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 + 3]), pool_id2str(pool, conflicts.elements[i + 4])); if (conflicts.count) { Queue job; int problemcnt; queue_init(&job); pool_add_fileconflicts_deps(pool, &conflicts); pool_addfileprovides(pool); pool_createwhatprovides(pool); pool_setdebuglevel(pool, 0); Solver *solv = solver_create(pool); queue_push2(&job, SOLVER_VERIFY|SOLVER_SOLVABLE_ALL, 0); #if 0 solver_set_flag(solv, SOLVER_FLAG_ALLOW_UNINSTALL, 1); #endif problemcnt = solver_solve(solv, &job); if (problemcnt) solver_printallsolutions(solv); else { Transaction *trans = solver_create_transaction(solv); transaction_print(trans); transaction_free(trans); } queue_free(&job); solver_free(solv); } queue_free(&conflicts); exit(0); }
int main() { Pool *pool; Repo *installed; Solvable *s; Id p; int i; Queue todo, conflicts; void *state = 0; pool = pool_create(); pool_setdebuglevel(pool, 1); installed = repo_create(pool, "@System"); pool_set_installed(pool, installed); repo_add_rpmdb(installed, 0, 0, 0); queue_init(&todo); queue_init(&conflicts); FOR_REPO_SOLVABLES(installed, p, s) queue_push(&todo, p); pool_findfileconflicts(pool, &todo, 0, &conflicts, &iterate_handle, (void *)&state); queue_free(&todo); for (i = 0; i < conflicts.count; i += 5) printf("%s: %s[%s] %s[%s]\n", id2str(pool, conflicts.elements[i]), solvid2str(pool, conflicts.elements[i + 1]), id2str(pool, conflicts.elements[i + 2]), solvid2str(pool, conflicts.elements[i + 3]), id2str(pool, conflicts.elements[i + 4])); if (conflicts.count) { Queue job; queue_init(&job); pool_add_fileconflicts_deps(pool, &conflicts); pool_addfileprovides(pool); pool_createwhatprovides(pool); pool_setdebuglevel(pool, 0); Solver *solv = solver_create(pool); solv->fixsystem = 1; #if 0 solv->allowuninstall = 1; #endif solver_solve(solv, &job); if (solv->problems.count) solver_printallsolutions(solv); else solver_printtransaction(solv); queue_free(&job); solver_free(solv); } queue_free(&conflicts); exit(0); }
int checkfileconflicts(Pool *pool, Queue *checkq, int newpkgs, FILE **newpkgsfps, Queue *conflicts) { struct fcstate fcstate; int i; printf("Searching for file conflicts\n"); queue_init(conflicts); fcstate.rpmstate = rpm_state_create(pool, pool_get_rootdir(pool)); fcstate.newpkgscnt = newpkgs; fcstate.checkq = checkq; fcstate.newpkgsfps = newpkgsfps; pool_findfileconflicts(pool, checkq, newpkgs, conflicts, FINDFILECONFLICTS_USE_SOLVABLEFILELIST | FINDFILECONFLICTS_CHECK_DIRALIASING | FINDFILECONFLICTS_USE_ROOTDIR, &fileconflict_cb, &fcstate); fcstate.rpmstate = rpm_state_free(fcstate.rpmstate); if (conflicts->count) { printf("\n"); for (i = 0; i < conflicts->count; i += 6) printf("file %s of package %s conflicts with package %s\n", pool_id2str(pool, conflicts->elements[i]), pool_solvid2str(pool, conflicts->elements[i + 1]), pool_solvid2str(pool, conflicts->elements[i + 4])); printf("\n"); } return conflicts->count; }