X-Original-To: alpine-devel@lists.alpinelinux.org Received: from mail.wilcox-tech.com (mail.wilcox-tech.com [45.32.83.9]) by lists.alpinelinux.org (Postfix) with ESMTP id CD8CBF84D49 for ; Sat, 1 Jun 2019 04:25:42 +0000 (UTC) Received: (qmail 7289 invoked from network); 1 Jun 2019 04:25:40 -0000 Received: from localhost (HELO gwyn.attlocal.net) (awilcox@wilcox-tech.com@127.0.0.1) by localhost with ESMTPA; 1 Jun 2019 04:25:40 -0000 From: "A. Wilcox" To: alpine-devel@lists.alpinelinux.org Cc: "A. Wilcox" Subject: [alpine-devel] [PATCH 1/1] upgrade: add --deep option to upgrade everything Date: Fri, 31 May 2019 23:25:16 -0500 Message-Id: <20190601042516.56133-2-AWilcox@Wilcox-Tech.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190601042516.56133-1-AWilcox@Wilcox-Tech.com> References: <20190601042516.56133-1-AWilcox@Wilcox-Tech.com> X-Mailinglist: alpine-devel Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit --- 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 --- Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org Help: alpine-devel+help@lists.alpinelinux.org ---