summaryrefslogtreecommitdiff
path: root/src/solver.c
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2022-12-25 14:57:47 +0200
committerTimo Teräs <timo.teras@iki.fi>2022-12-25 14:59:57 +0200
commit067c17312418937b6fc81cbba78349ce2566f942 (patch)
treecbdc79c459dad6284a213460e0e2896c3a1527ff /src/solver.c
parenta7f5996e2fc2b4ec00d40f3ae53a56cb6d8dbca0 (diff)
downloadapk-tools-067c17312418937b6fc81cbba78349ce2566f942.tar.gz
apk-tools-067c17312418937b6fc81cbba78349ce2566f942.tar.bz2
apk-tools-067c17312418937b6fc81cbba78349ce2566f942.tar.xz
apk-tools-067c17312418937b6fc81cbba78349ce2566f942.zip
solver: prioritize user specified action on mentioned packages
Force preference on the user specified action on commandline. This allows upgrading packages which would otherwise be kept back due to partial update preferring to keep top level dependency on the installed version. fixes #7531
Diffstat (limited to 'src/solver.c')
-rw-r--r--src/solver.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/solver.c b/src/solver.c
index 2548de7..8021df2 100644
--- a/src/solver.c
+++ b/src/solver.c
@@ -51,6 +51,7 @@ void apk_solver_set_name_flags(struct apk_name *name,
{
struct apk_provider *p;
+ name->solver_flags_set = 1;
foreach_array_item(p, name->providers) {
struct apk_package *pkg = p->pkg;
dbg_printf("marking '" PKG_VER_FMT "' = 0x%04x / 0x%04x\n",
@@ -1030,6 +1031,9 @@ static int compare_name_dequeue(const struct apk_name *a, const struct apk_name
{
int r;
+ r = !!(a->solver_flags_set) - !!(b->solver_flags_set);
+ if (r) return -r;
+
r = (int)a->priority - (int)b->priority;
if (r) return r;