diff options
Diffstat (limited to 'main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch')
-rw-r--r-- | main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch b/main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch deleted file mode 100644 index f5975055ea..0000000000 --- a/main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 0f895650996a2565c0dc59d3c94f861145b42c05 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi> -Date: Fri, 20 Jan 2012 10:39:00 +0200 -Subject: [PATCH 2/2] solver: fix regression from "calculate branch minimum - penalty early" - -Forgot to reset per-name penalty when it got locked by apply_decision. -This also fine tunes compare_package_preference() to always prefer -packages specified on command line speeding up calculation certain -complicated solutions. ---- - src/solver.c | 28 +++++++++++++++++++++------- - test/error2.expect | 3 +-- - 2 files changed, 22 insertions(+), 9 deletions(-) - -diff --git a/src/solver.c b/src/solver.c -index 76edeba..ba98ca6 100644 ---- a/src/solver.c -+++ b/src/solver.c -@@ -325,6 +325,12 @@ static int compare_package_preference(unsigned short solver_flags, - struct apk_package *pkgA, - struct apk_package *pkgB) - { -+ /* specified on command line directly */ -+ if (pkgA->filename && !pkgB->filename) -+ return 1; -+ if (pkgB->filename && !pkgA->filename) -+ return -1; -+ - if (solver_flags & APK_SOLVERF_PREFER_TAG) { - /* preferred repository pinning */ - if ((pkgA->repos & preferred_repos) && !(pkgB->repos & preferred_repos)) -@@ -333,11 +339,11 @@ static int compare_package_preference(unsigned short solver_flags, - return -1; - } else { - /* preferred repository pinning */ -- if ((pkgA->ipkg || pkgA->filename || (pkgA->repos & preferred_repos)) && -- !(pkgB->ipkg || pkgB->filename || (pkgB->repos & preferred_repos))) -+ if ((pkgA->ipkg || (pkgA->repos & preferred_repos)) && -+ !(pkgB->ipkg || (pkgB->repos & preferred_repos))) - return 1; -- if ((pkgB->ipkg || pkgA->filename || (pkgB->repos & preferred_repos)) && -- !(pkgA->ipkg || pkgB->filename || (pkgA->repos & preferred_repos))) -+ if ((pkgB->ipkg || (pkgB->repos & preferred_repos)) && -+ !(pkgA->ipkg || (pkgA->repos & preferred_repos))) - return -1; - } - -@@ -504,9 +510,6 @@ static int update_name_state(struct apk_solver_state *ss, struct apk_name *name) - dbg_printf("%s: deleted from unsolved: %d requirers, %d install_ifs, %d options, %d skipped\n", - name->name, ns->requirers, ns->install_ifs, options, skipped_options); - } else { -- dbg_printf("%s: added to unsolved: %d requirers, %d install_ifs, %d options (next topology %d)\n", -- name->name, ns->requirers, ns->install_ifs, options, -- best_topology); - if (!list_hashed(&ns->unsolved_list)) - list_add(&ns->unsolved_list, &ss->unsolved_list_head); - if (!ns->locked) { -@@ -517,6 +520,11 @@ static int update_name_state(struct apk_solver_state *ss, struct apk_name *name) - .unsatisfiable = preferred_ps->conflicts, - .preference = get_preference(ss, preferred_pkg, FALSE), - }; -+ dbg_printf("%s: min.penalty for name {%d, %d} from pkg " PKG_VER_FMT "\n", -+ name->name, -+ ns->minimum_penalty.unsatisfiable, -+ ns->minimum_penalty.preference, -+ PKG_VER_PRINTF(preferred_pkg)); - } else { - ns->minimum_penalty = (struct apk_score) { - .unsatisfiable = ns->requirers, -@@ -525,6 +533,9 @@ static int update_name_state(struct apk_solver_state *ss, struct apk_name *name) - } - addscore(&ss->minimum_penalty, &ns->minimum_penalty); - } -+ dbg_printf("%s: added to unsolved: %d requirers, %d install_ifs, %d options (next topology %d)\n", -+ name->name, ns->requirers, ns->install_ifs, options, -+ best_topology); - } - - return options + skipped_options; -@@ -568,6 +579,9 @@ static void apply_decision(struct apk_solver_state *ss, - (ps->flags & APK_PKGSTF_INSTALL) ? "INSTALL" : "NO_INSTALL"); - - if (ps->flags & APK_PKGSTF_INSTALL) { -+ subscore(&ss->minimum_penalty, &ns->minimum_penalty); -+ ns->minimum_penalty = (struct apk_score) { 0, 0 }; -+ - ss->assigned_names++; - ss->score.unsatisfiable += ps->conflicts; - ss->score.preference += get_preference(ss, pkg, FALSE); -diff --git a/test/error2.expect b/test/error2.expect -index 65d0093..7faac5e 100644 ---- a/test/error2.expect -+++ b/test/error2.expect -@@ -1,3 +1,2 @@ --2 unsatisfiable dependencies (solution with 4 names) -+1 unsatisfiable dependencies (solution with 4 names) - world: d<1.5 --b-1: d<2.0 --- -1.7.7.3 - |