From c73effbe1823cd37af9fe647cdc4d133ba0429cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Ter=C3=A4s?= Date: Fri, 20 Jan 2012 11:45:48 +0200 Subject: main/apk-tools: cherry-pick a regression fix from upstream --- main/apk-tools/0001-lua-fix-compile-error.patch | 25 +++++ ...regression-from-calculate-branch-minimum-.patch | 102 +++++++++++++++++++++ main/apk-tools/APKBUILD | 8 +- main/apk-tools/fix-lua-apk.patch | 13 --- 4 files changed, 132 insertions(+), 16 deletions(-) create mode 100644 main/apk-tools/0001-lua-fix-compile-error.patch create mode 100644 main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch delete mode 100644 main/apk-tools/fix-lua-apk.patch (limited to 'main/apk-tools') diff --git a/main/apk-tools/0001-lua-fix-compile-error.patch b/main/apk-tools/0001-lua-fix-compile-error.patch new file mode 100644 index 000000000..54059f1de --- /dev/null +++ b/main/apk-tools/0001-lua-fix-compile-error.patch @@ -0,0 +1,25 @@ +From 00fd7b07f12a18615da1ad32b915787f72074dfa Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Timo=20Ter=C3=A4s?= +Date: Tue, 17 Jan 2012 15:59:01 +0200 +Subject: [PATCH 1/2] lua: fix compile error + +--- + src/lua-apk.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/lua-apk.c b/src/lua-apk.c +index 6fbd1cf..45488c2 100644 +--- a/src/lua-apk.c ++++ b/src/lua-apk.c +@@ -208,7 +208,7 @@ static int Papk_exists(lua_State *L) + apk_blob_t blob = APK_BLOB_STR(depstr); + apk_blob_pull_dep(&blob, db, &dep); + +- if (APK_BLOB_IS_NULL(blob) || b.len > 0) ++ if (APK_BLOB_IS_NULL(blob) || blob.len > 0) + goto ret_nil; + + name = dep.name; +-- +1.7.7.3 + 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 new file mode 100644 index 000000000..f5975055e --- /dev/null +++ b/main/apk-tools/0002-solver-fix-regression-from-calculate-branch-minimum-.patch @@ -0,0 +1,102 @@ +From 0f895650996a2565c0dc59d3c94f861145b42c05 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Timo=20Ter=C3=A4s?= +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 + diff --git a/main/apk-tools/APKBUILD b/main/apk-tools/APKBUILD index 86845e8e4..fc00bdb28 100644 --- a/main/apk-tools/APKBUILD +++ b/main/apk-tools/APKBUILD @@ -1,13 +1,14 @@ # Maintainer: Natanael Copa pkgname=apk-tools pkgver=2.2.3 -pkgrel=0 +pkgrel=1 pkgdesc="Alpine Package Keeper - package manager for alpine" subpackages="$pkgname-static lua-apk:luaapk" depends= makedepends="zlib-dev openssl-dev lua-dev" source="http://git.alpinelinux.org/cgit/$pkgname/snapshot/$pkgname-$pkgver.tar.bz2 - fix-lua-apk.patch + 0001-lua-fix-compile-error.patch + 0002-solver-fix-regression-from-calculate-branch-minimum-.patch " url="http://git.alpinelinux.org/cgit/apk-tools/" @@ -56,4 +57,5 @@ luaapk() { } md5sums="31dcb57491d08ea69f0d041aad94e865 apk-tools-2.2.3.tar.bz2 -66e110316e76408f19f8c44e698c26cb fix-lua-apk.patch" +752832872f52178f76b596e8a33f5918 0001-lua-fix-compile-error.patch +b527744735a2e74e3772ca51b2ef7699 0002-solver-fix-regression-from-calculate-branch-minimum-.patch" diff --git a/main/apk-tools/fix-lua-apk.patch b/main/apk-tools/fix-lua-apk.patch deleted file mode 100644 index 0c13e815b..000000000 --- a/main/apk-tools/fix-lua-apk.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/lua-apk.c b/src/lua-apk.c -index 6fbd1cf..45488c2 100644 ---- a/src/lua-apk.c -+++ b/src/lua-apk.c -@@ -208,7 +208,7 @@ static int Papk_exists(lua_State *L) - apk_blob_t blob = APK_BLOB_STR(depstr); - apk_blob_pull_dep(&blob, db, &dep); - -- if (APK_BLOB_IS_NULL(blob) || b.len > 0) -+ if (APK_BLOB_IS_NULL(blob) || blob.len > 0) - goto ret_nil; - - name = dep.name; -- cgit v1.2.3