summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2010-05-11 09:31:20 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2010-05-12 06:08:18 +0000
commit47bac8c29c9a3c3fbebfd20e907170f24f9d677c (patch)
tree7bab2894ca66affbd5d9fd3cd3af5e07c1021641 /src
parent87420aaf295f58847332ba3aa89691a0259baace (diff)
downloadapk-tools-47bac8c29c9a3c3fbebfd20e907170f24f9d677c.tar.gz
apk-tools-47bac8c29c9a3c3fbebfd20e907170f24f9d677c.tar.bz2
apk-tools-47bac8c29c9a3c3fbebfd20e907170f24f9d677c.tar.xz
apk-tools-47bac8c29c9a3c3fbebfd20e907170f24f9d677c.zip
upgrade: reset versioned deps in world when doing upgrade -a
Doing "apk add file.apk" adds a versioned dependency to allow downgrading, and sticky version. Most often this is to install single packages from newer repository. So it would make sense to reset them to non-versioned if doing: apk upgrade -a fixes #346
Diffstat (limited to 'src')
-rw-r--r--src/upgrade.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/upgrade.c b/src/upgrade.c
index f91e8cc..879e14c 100644
--- a/src/upgrade.c
+++ b/src/upgrade.c
@@ -41,10 +41,15 @@ static int upgrade_main(void *ctx, struct apk_database *db, int argc, char **arg
goto err;
for (i = 0; i < db->world->num; i++) {
- r = apk_state_lock_dependency(state, &db->world->item[i]);
+ struct apk_dependency *dep = &db->world->item[i];
+ if (dep->version && (apk_flags & APK_PREFER_AVAILABLE)) {
+ dep->result_mask = APK_VERSION_EQUAL | APK_VERSION_LESS | APK_VERSION_GREATER;
+ dep->version = NULL;
+ }
+ r = apk_state_lock_dependency(state, dep);
if (r != 0) {
apk_error("Unable to upgrade '%s'",
- db->world->item[i].name->name);
+ dep->name->name);
goto err;
}
}