summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/apk_database.h1
-rw-r--r--src/solver.c4
2 files changed, 5 insertions, 0 deletions
diff --git a/src/apk_database.h b/src/apk_database.h
index 917ee35..1947df0 100644
--- a/src/apk_database.h
+++ b/src/apk_database.h
@@ -101,6 +101,7 @@ struct apk_name {
unsigned is_dependency : 1;
unsigned auto_select_virtual: 1;
unsigned priority : 2;
+ unsigned solver_flags_set : 1;
unsigned int foreach_genid;
union {
struct apk_solver_name_state ss;
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;