upgrade: make -a reset versioned dependencies like it used to

regression from upgrade to the new solver system.
cute-signatures
Timo Teräs 2012-01-17 14:31:29 +02:00
parent 64b03ab603
commit eaaba3ee89
1 changed files with 21 additions and 2 deletions

View File

@ -94,7 +94,8 @@ static int upgrade_main(void *ctx, struct apk_database *db, int argc, char **arg
{ {
struct upgrade_ctx *uctx = (struct upgrade_ctx *) ctx; struct upgrade_ctx *uctx = (struct upgrade_ctx *) ctx;
unsigned short solver_flags; unsigned short solver_flags;
int r; struct apk_dependency_array *world = NULL;
int i, r;
solver_flags = APK_SOLVERF_UPGRADE | uctx->solver_flags; solver_flags = APK_SOLVERF_UPGRADE | uctx->solver_flags;
if (!uctx->no_self_upgrade) { if (!uctx->no_self_upgrade) {
@ -103,7 +104,25 @@ static int upgrade_main(void *ctx, struct apk_database *db, int argc, char **arg
return r; return r;
} }
return apk_solver_commit(db, solver_flags, db->world); if (solver_flags & APK_SOLVERF_AVAILABLE) {
apk_dependency_array_copy(&world, db->world);
for (i = 0; i < world->num; i++) {
struct apk_dependency *dep = &world->item[i];
if (dep->result_mask == APK_DEPMASK_CHECKSUM) {
dep->result_mask = APK_DEPMASK_REQUIRE;
dep->version = apk_blob_atomize(APK_BLOB_NULL);
}
}
} else {
world = db->world;
}
r = apk_solver_commit(db, solver_flags, world);
if (solver_flags & APK_SOLVERF_AVAILABLE)
apk_dependency_array_free(&world);
return r;
} }
static struct apk_option upgrade_options[] = { static struct apk_option upgrade_options[] = {