summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2026-03-08 15:32:00 +0000
committerFelix Fietkau2026-03-08 15:35:56 +0000
commit37a1070b37b5da97a622e2d8a2d69fef73b9d641 (patch)
tree03dbc726089ae75ed61feb4e166d15f1f07e1ecf
parent2eeab0174c41ff98cef5af0fd45c6890fc89cc54 (diff)
downloadopenwrt-37a1070b37b5da97a622e2d8a2d69fef73b9d641.tar.gz
apk: add --force-reinstall option
Allow reinstalling already-installed packages without a version change. Only the named packages are reinstalled, not their dependencies. Signed-off-by: Felix Fietkau <nbd@nbd.name> (cherry picked from commit 91cff1a6d35a92b8f376940c2fa45b8447aa0cdf)
-rw-r--r--package/system/apk/Makefile2
-rw-r--r--package/system/apk/patches/0100-add-add-force-reinstall-option.patch48
2 files changed, 49 insertions, 1 deletions
diff --git a/package/system/apk/Makefile b/package/system/apk/Makefile
index 945722c6c0..2cea412dd5 100644
--- a/package/system/apk/Makefile
+++ b/package/system/apk/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=apk
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_SOURCE_URL=https://gitlab.alpinelinux.org/alpine/apk-tools.git
PKG_SOURCE_PROTO:=git
diff --git a/package/system/apk/patches/0100-add-add-force-reinstall-option.patch b/package/system/apk/patches/0100-add-add-force-reinstall-option.patch
new file mode 100644
index 0000000000..9d8c4c6c67
--- /dev/null
+++ b/package/system/apk/patches/0100-add-add-force-reinstall-option.patch
@@ -0,0 +1,48 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Sun, 8 Mar 2026 13:41:16 +0000
+Subject: [PATCH] add: add --force-reinstall option
+
+Allow reinstalling already-installed packages without a version change.
+Only the named packages are reinstalled, not their dependencies.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/src/app_add.c
++++ b/src/app_add.c
+@@ -24,6 +24,7 @@ struct add_ctx {
+ OPT(OPT_ADD_initdb, "initdb") \
+ OPT(OPT_ADD_latest, APK_OPT_SH("l") "latest") \
+ OPT(OPT_ADD_no_chown, "no-chown") \
++ OPT(OPT_ADD_reinstall, "force-reinstall") \
+ OPT(OPT_ADD_upgrade, APK_OPT_SH("u") "upgrade") \
+ OPT(OPT_ADD_usermode, "usermode") \
+ OPT(OPT_ADD_virtual, APK_OPT_ARG APK_OPT_SH("t") "virtual")
+@@ -41,6 +42,9 @@ static int add_parse_option(void *ctx, s
+ case OPT_ADD_latest:
+ actx->solver_flags |= APK_SOLVERF_LATEST;
+ break;
++ case OPT_ADD_reinstall:
++ actx->solver_flags |= APK_SOLVERF_REINSTALL;
++ break;
+ case OPT_ADD_upgrade:
+ actx->solver_flags |= APK_SOLVERF_UPGRADE;
+ break;
+@@ -177,7 +181,7 @@ static int add_main(void *ctx, struct ap
+ apk_deps_add(&world, &dep);
+ apk_solver_set_name_flags(dep.name,
+ actx->solver_flags,
+- actx->solver_flags);
++ actx->solver_flags & ~APK_SOLVERF_REINSTALL);
+ }
+ }
+ if (actx->virtpkg) {
+@@ -185,7 +189,7 @@ static int add_main(void *ctx, struct ap
+ apk_deps_add(&world, &virtdep);
+ apk_solver_set_name_flags(virtdep.name,
+ actx->solver_flags,
+- actx->solver_flags);
++ actx->solver_flags & ~APK_SOLVERF_REINSTALL);
+ }
+
+ r = apk_solver_commit(db, 0, world);