mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-05 21:37:15 +02:00
main/apk-tools: upgrade to 2.9.0
This commit is contained in:
parent
db7a5533fe
commit
c7c225106d
@ -1,184 +0,0 @@
|
|||||||
From 8e7fd3e06f300bd76b659db1164da1ee12f16870 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
|
|
||||||
Date: Tue, 12 Dec 2017 15:14:25 +0200
|
|
||||||
Subject: [PATCH] solver: fix potential install_if processing failure, fixes
|
|
||||||
#8237
|
|
||||||
|
|
||||||
In discovery phase, there was logic to not process packages
|
|
||||||
multiple times. However, that logic failed to account the package's
|
|
||||||
depth and install_if state for the name being processed. This
|
|
||||||
caused install_if processing failure in certain topologies of the
|
|
||||||
dependency graph. Adds also a test case that should catch this
|
|
||||||
issue reliably.
|
|
||||||
---
|
|
||||||
src/solver.c | 95 +++++++++++++++++++++++++++-------------------------
|
|
||||||
test/installif1.repo | 20 +++++++++++
|
|
||||||
test/installif5.test | 8 +++++
|
|
||||||
3 files changed, 77 insertions(+), 46 deletions(-)
|
|
||||||
create mode 100644 test/installif5.test
|
|
||||||
|
|
||||||
diff --git a/src/solver.c b/src/solver.c
|
|
||||||
index 5698215..851e77e 100644
|
|
||||||
--- a/src/solver.c
|
|
||||||
+++ b/src/solver.c
|
|
||||||
@@ -184,55 +184,57 @@ static void discover_name(struct apk_solver_state *ss, struct apk_name *name)
|
|
||||||
name->ss.no_iif = 1;
|
|
||||||
foreach_array_item(p, name->providers) {
|
|
||||||
struct apk_package *pkg = p->pkg;
|
|
||||||
- if (pkg->ss.seen)
|
|
||||||
- continue;
|
|
||||||
+ if (!pkg->ss.seen) {
|
|
||||||
+ pkg->ss.seen = 1;
|
|
||||||
+ pkg->ss.pinning_allowed = APK_DEFAULT_PINNING_MASK;
|
|
||||||
+ pkg->ss.pinning_preferred = APK_DEFAULT_PINNING_MASK;
|
|
||||||
+ pkg->ss.pkg_available =
|
|
||||||
+ (pkg->filename != NULL) ||
|
|
||||||
+ (pkg->repos & db->available_repos & ~BIT(APK_REPOSITORY_CACHED));
|
|
||||||
+ /* Package is in 'cached' repository if filename is provided,
|
|
||||||
+ * or it's a 'virtual' package with install_size zero */
|
|
||||||
+ pkg->ss.pkg_selectable =
|
|
||||||
+ (pkg->repos & db->available_repos) ||
|
|
||||||
+ pkg->cached_non_repository ||
|
|
||||||
+ pkg->ipkg;
|
|
||||||
+
|
|
||||||
+ /* Prune install_if packages that are no longer available,
|
|
||||||
+ * currently works only if SOLVERF_AVAILABLE is set in the
|
|
||||||
+ * global solver flags. */
|
|
||||||
+ pkg->ss.iif_failed =
|
|
||||||
+ (pkg->install_if->num == 0) ||
|
|
||||||
+ ((ss->solver_flags_inherit & APK_SOLVERF_AVAILABLE) &&
|
|
||||||
+ !pkg->ss.pkg_available);
|
|
||||||
+
|
|
||||||
+ repos = get_pkg_repos(db, pkg);
|
|
||||||
+ pkg->ss.tag_preferred =
|
|
||||||
+ (pkg->filename != NULL) ||
|
|
||||||
+ (pkg->installed_size == 0) ||
|
|
||||||
+ (repos & ss->default_repos);
|
|
||||||
+ pkg->ss.tag_ok =
|
|
||||||
+ pkg->ss.tag_preferred ||
|
|
||||||
+ pkg->cached_non_repository ||
|
|
||||||
+ pkg->ipkg;
|
|
||||||
|
|
||||||
- pkg->ss.seen = 1;
|
|
||||||
-
|
|
||||||
- pkg->ss.pinning_allowed = APK_DEFAULT_PINNING_MASK;
|
|
||||||
- pkg->ss.pinning_preferred = APK_DEFAULT_PINNING_MASK;
|
|
||||||
- pkg->ss.pkg_available =
|
|
||||||
- (pkg->filename != NULL) ||
|
|
||||||
- (pkg->repos & db->available_repos & ~BIT(APK_REPOSITORY_CACHED));
|
|
||||||
- /* Package is in 'cached' repository if filename is provided,
|
|
||||||
- * or it's a 'virtual' package with install_size zero */
|
|
||||||
- pkg->ss.pkg_selectable =
|
|
||||||
- (pkg->repos & db->available_repos) ||
|
|
||||||
- pkg->cached_non_repository ||
|
|
||||||
- pkg->ipkg;
|
|
||||||
-
|
|
||||||
- /* Prune install_if packages that are no longer available,
|
|
||||||
- * currently works only if SOLVERF_AVAILABLE is set in the
|
|
||||||
- * global solver flags. */
|
|
||||||
- pkg->ss.iif_failed =
|
|
||||||
- (pkg->install_if->num == 0) ||
|
|
||||||
- ((ss->solver_flags_inherit & APK_SOLVERF_AVAILABLE) &&
|
|
||||||
- !pkg->ss.pkg_available);
|
|
||||||
- name->ss.no_iif &= pkg->ss.iif_failed;
|
|
||||||
+ foreach_array_item(dep, pkg->depends) {
|
|
||||||
+ discover_name(ss, dep->name);
|
|
||||||
+ pkg->ss.max_dep_chain = max(pkg->ss.max_dep_chain,
|
|
||||||
+ dep->name->ss.max_dep_chain+1);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- repos = get_pkg_repos(db, pkg);
|
|
||||||
- pkg->ss.tag_preferred =
|
|
||||||
- (pkg->filename != NULL) ||
|
|
||||||
- (pkg->installed_size == 0) ||
|
|
||||||
- (repos & ss->default_repos);
|
|
||||||
- pkg->ss.tag_ok =
|
|
||||||
- pkg->ss.tag_preferred ||
|
|
||||||
- pkg->cached_non_repository ||
|
|
||||||
- pkg->ipkg;
|
|
||||||
-
|
|
||||||
- foreach_array_item(dep, pkg->depends) {
|
|
||||||
- discover_name(ss, dep->name);
|
|
||||||
- pkg->ss.max_dep_chain = max(pkg->ss.max_dep_chain,
|
|
||||||
- dep->name->ss.max_dep_chain+1);
|
|
||||||
+ dbg_printf("discover " PKG_VER_FMT ": tag_ok=%d, tag_pref=%d max_dep_chain=%d selectable=%d\n",
|
|
||||||
+ PKG_VER_PRINTF(pkg),
|
|
||||||
+ pkg->ss.tag_ok,
|
|
||||||
+ pkg->ss.tag_preferred,
|
|
||||||
+ pkg->ss.max_dep_chain,
|
|
||||||
+ pkg->ss.pkg_selectable);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ name->ss.no_iif &= pkg->ss.iif_failed;
|
|
||||||
name->ss.max_dep_chain = max(name->ss.max_dep_chain, pkg->ss.max_dep_chain);
|
|
||||||
|
|
||||||
- dbg_printf("discover " PKG_VER_FMT ": tag_ok=%d, tag_pref=%d max_dep_chain=%d selectable=%d\n",
|
|
||||||
- PKG_VER_PRINTF(pkg),
|
|
||||||
- pkg->ss.tag_ok,
|
|
||||||
- pkg->ss.tag_preferred,
|
|
||||||
- pkg->ss.max_dep_chain,
|
|
||||||
- pkg->ss.pkg_selectable);
|
|
||||||
+ dbg_printf("discover %s: max_dep_chain=%d no_iif=%d\n",
|
|
||||||
+ name->name, name->ss.max_dep_chain, name->ss.no_iif);
|
|
||||||
}
|
|
||||||
foreach_array_item(pname0, name->rinstall_if)
|
|
||||||
discover_name(ss, *pname0);
|
|
||||||
@@ -398,10 +400,11 @@ static void reconsider_name(struct apk_solver_state *ss, struct apk_name *name)
|
|
||||||
foreach_array_item(dep, pkg->install_if)
|
|
||||||
inherit_pinning_and_flags(ss, pkg, dep->name->ss.chosen.pkg);
|
|
||||||
}
|
|
||||||
- dbg_printf(" "PKG_VER_FMT": iif_triggered=%d iif_failed=%d\n",
|
|
||||||
- PKG_VER_PRINTF(pkg), pkg->ss.iif_triggered, pkg->ss.iif_failed);
|
|
||||||
has_iif |= pkg->ss.iif_triggered;
|
|
||||||
no_iif &= pkg->ss.iif_failed;
|
|
||||||
+ dbg_printf(" "PKG_VER_FMT": iif_triggered=%d iif_failed=%d, no_iif=%d\n",
|
|
||||||
+ PKG_VER_PRINTF(pkg), pkg->ss.iif_triggered, pkg->ss.iif_failed,
|
|
||||||
+ no_iif);
|
|
||||||
|
|
||||||
if (name->ss.requirers == 0)
|
|
||||||
continue;
|
|
||||||
diff --git a/test/installif1.repo b/test/installif1.repo
|
|
||||||
index 09b6760..3990209 100644
|
|
||||||
--- a/test/installif1.repo
|
|
||||||
+++ b/test/installif1.repo
|
|
||||||
@@ -46,3 +46,23 @@ I:1
|
|
||||||
D:app
|
|
||||||
i:app bar
|
|
||||||
|
|
||||||
+C:Q1/hQ3fH2AzuTwJVGOz+keypXhXKY=
|
|
||||||
+P:dam
|
|
||||||
+V:1
|
|
||||||
+S:1
|
|
||||||
+I:1
|
|
||||||
+
|
|
||||||
+C:Q1/hQ3fH2AzuTwJVGfz+keypXhXKY=
|
|
||||||
+P:dam-babel
|
|
||||||
+V:1
|
|
||||||
+S:1
|
|
||||||
+I:1
|
|
||||||
+p:cmd:babel
|
|
||||||
+
|
|
||||||
+C:Q1/hQ3fH2AguTwJVGOz+keypXhXKY=
|
|
||||||
+P:dam1-babel
|
|
||||||
+V:1
|
|
||||||
+S:1
|
|
||||||
+I:1
|
|
||||||
+i:dam dam-babel
|
|
||||||
+p:cmd:babel
|
|
||||||
diff --git a/test/installif5.test b/test/installif5.test
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..a0c707b
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/test/installif5.test
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+@ARGS
|
|
||||||
+--test-repo installif1.repo
|
|
||||||
+add dam dam-babel cmd:babel
|
|
||||||
+@EXPECT
|
|
||||||
+(1/3) Installing dam-babel (1)
|
|
||||||
+(2/3) Installing dam (1)
|
|
||||||
+(3/3) Installing dam1-babel (1)
|
|
||||||
+OK: 0 MiB in 0 packages
|
|
||||||
--
|
|
||||||
2.14.3
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
||||||
pkgname=apk-tools
|
pkgname=apk-tools
|
||||||
pkgver=2.8.1
|
pkgver=2.9.0
|
||||||
pkgrel=2
|
pkgrel=0
|
||||||
pkgdesc="Alpine Package Keeper - package manager for alpine"
|
pkgdesc="Alpine Package Keeper - package manager for alpine"
|
||||||
subpackages="$pkgname-static"
|
subpackages="$pkgname-static"
|
||||||
depends=
|
depends=
|
||||||
@ -13,7 +13,6 @@ if [ "$CBUILD" = "$CHOST" ]; then
|
|||||||
makedepends="$makedepends lua5.2-dev"
|
makedepends="$makedepends lua5.2-dev"
|
||||||
fi
|
fi
|
||||||
source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$pkgver.tar.xz
|
source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-$pkgver.tar.xz
|
||||||
0001-solver-fix-potential-install_if-processing-failure-f.patch
|
|
||||||
"
|
"
|
||||||
|
|
||||||
url="https://git.alpinelinux.org/cgit/apk-tools/"
|
url="https://git.alpinelinux.org/cgit/apk-tools/"
|
||||||
@ -83,5 +82,4 @@ luaapk() {
|
|||||||
mv "$pkgdir"/usr/lib "$subpkgdir"/usr/lib/
|
mv "$pkgdir"/usr/lib "$subpkgdir"/usr/lib/
|
||||||
}
|
}
|
||||||
|
|
||||||
sha512sums="be36afe5af7beca5f5895c835690ffe7683b70cce6bfef9bc880103f5872a157e7192c172eb23dcd64905ee4e029ee75ee19310d24b267aa94656696b1944466 apk-tools-2.8.1.tar.xz
|
sha512sums="15b6325a86690668f971e0539b4acdadef6e533c40e663345dd8cc5552acacdfad9b78f84a98f0c7f58f381b05e87963f4f8217dd1649167653141dd4005696a apk-tools-2.9.0.tar.xz"
|
||||||
ae558e2ffb0008def9de46996c5b5853cbd5432de21755a24b55271250f0e987974314859c51ec533cd4f2f4ee0c178f4902a2f74c8f3361a3b7870a33300f8e 0001-solver-fix-potential-install_if-processing-failure-f.patch"
|
|
||||||
|
Loading…
Reference in New Issue
Block a user