summaryrefslogtreecommitdiff
path: root/system/apk-tools/deep.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/apk-tools/deep.patch')
-rw-r--r--system/apk-tools/deep.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/system/apk-tools/deep.patch b/system/apk-tools/deep.patch
new file mode 100644
index 000000000..f315339cc
--- /dev/null
+++ b/system/apk-tools/deep.patch
@@ -0,0 +1,84 @@
+From e61635ada7901763919caeaa01fa62ead3f6e97f Mon Sep 17 00:00:00 2001
+From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
+Date: Fri, 31 May 2019 21:32:02 -0500
+Subject: [PATCH 1/1] upgrade: add --deep option to upgrade everything
+
+---
+ src/apk_solver.h | 1 +
+ src/solver.c | 10 ++++++++++
+ src/upgrade.c | 5 +++++
+ 3 files changed, 16 insertions(+)
+
+diff --git a/src/apk_solver.h b/src/apk_solver.h
+index b8b072d..908b3fd 100644
+--- a/src/apk_solver.h
++++ b/src/apk_solver.h
+@@ -35,6 +35,7 @@ struct apk_changeset {
+ #define APK_SOLVERF_REINSTALL 0x0004
+ #define APK_SOLVERF_LATEST 0x0008
+ #define APK_SOLVERF_IGNORE_CONFLICT 0x0010
++#define APK_SOLVERF_DEEP 0x0020
+
+ void apk_solver_set_name_flags(struct apk_name *name,
+ unsigned short solver_flags,
+diff --git a/src/solver.c b/src/solver.c
+index e10cf8b..8437d61 100644
+--- a/src/solver.c
++++ b/src/solver.c
+@@ -40,6 +40,7 @@ struct apk_solver_state {
+ unsigned int pinning_inherit;
+ unsigned int default_repos;
+ unsigned ignore_conflict : 1;
++ unsigned deep_upgrade : 1;
+ };
+
+ static struct apk_provider provider_none = {
+@@ -510,6 +511,14 @@ static int compare_providers(struct apk_solver_state *ss,
+ unsigned int solver_flags;
+ int r;
+
++ /* In deep upgrades, always return the greater version */
++ if (ss->deep_upgrade)
++ switch (apk_version_compare_blob(*pA->version, *pB->version)) {
++ case APK_VERSION_LESS:
++ return -1;
++ case APK_VERSION_GREATER:
++ return 1;
++ }
+
+ /* Prefer existing package */
+ if (pkgA == NULL || pkgB == NULL)
+@@ -1006,6 +1015,7 @@ restart:
+ ss->changeset = changeset;
+ ss->default_repos = apk_db_get_pinning_mask_repos(db, APK_DEFAULT_PINNING_MASK);
+ ss->ignore_conflict = !!(solver_flags & APK_SOLVERF_IGNORE_CONFLICT);
++ ss->deep_upgrade = !!(solver_flags & APK_SOLVERF_DEEP);
+ list_init(&ss->dirty_head);
+ list_init(&ss->unresolved_head);
+
+diff --git a/src/upgrade.c b/src/upgrade.c
+index 14457b5..e48d8e3 100644
+--- a/src/upgrade.c
++++ b/src/upgrade.c
+@@ -38,6 +38,9 @@ static int option_parse_applet(void *ctx, struct apk_db_options *dbopts, int opt
+ case 'a':
+ uctx->solver_flags |= APK_SOLVERF_AVAILABLE;
+ break;
++ case 'd':
++ uctx->solver_flags |= APK_SOLVERF_DEEP;
++ break;
+ case 'l':
+ uctx->solver_flags |= APK_SOLVERF_LATEST;
+ break;
+@@ -59,6 +62,8 @@ static const struct apk_option options_applet[] = {
+ { 0x10000, "no-self-upgrade",
+ "Do not do early upgrade of 'apk-tools' package" },
+ { 0x10001, "self-upgrade-only", "Only do self-upgrade" },
++ { 'd', "deep",
++ "Include dependencies when upgrading world" },
+ };
+
+ static const struct apk_option_group optgroup_applet = {
+--
+2.21.0
+