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