summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2023-01-31 15:14:54 +0200
committerTimo Teräs <timo.teras@iki.fi>2023-04-10 22:06:24 +0300
commit6870c6023ebc1e190e5c06138391a3ae80ff975d (patch)
treee52b8492b584110b572225acbc54c1f6b855d352
parentc1db6b2238c728aee982fd65ef7037d6489c3084 (diff)
downloadapk-tools-6870c6023ebc1e190e5c06138391a3ae80ff975d.tar.gz
apk-tools-6870c6023ebc1e190e5c06138391a3ae80ff975d.tar.bz2
apk-tools-6870c6023ebc1e190e5c06138391a3ae80ff975d.tar.xz
apk-tools-6870c6023ebc1e190e5c06138391a3ae80ff975d.zip
cache: improve and document purging
Document cache clean --purge better. Add a cache purge alias for it. And also purge installed package copies on disk installs. fixes #10857
-rw-r--r--doc/apk-cache.8.scd8
-rw-r--r--doc/apk.8.scd6
-rw-r--r--src/app_cache.c15
3 files changed, 21 insertions, 8 deletions
diff --git a/doc/apk-cache.8.scd b/doc/apk-cache.8.scd
index e5a9b6f..0a04123 100644
--- a/doc/apk-cache.8.scd
+++ b/doc/apk-cache.8.scd
@@ -10,6 +10,8 @@ apk cache - manage a local cache of package files
*apk cache* [<_options_>...] download [_dependency_...]
+*apk cache* [<_options_>...] purge
+
*apk cache* [<_options_>...] sync [_dependency_...]
# DESCRIPTION
@@ -23,7 +25,11 @@ default _world_ dependencies are used to determine what to download. If
_dependency_ arguments are given, they will by default replace the _world_.
*apk cache clean* will remove package files which no longer exist in any
-repository index.
+repository index. Specifying the global option *--purge* will additionally
+remove all uninstalled package on tmpfs installations, and all packages on
+disk installations.
+
+*apk cache purge* is a synonym for *clean --purge*.
*apk cache sync* performs both operations.
diff --git a/doc/apk.8.scd b/doc/apk.8.scd
index 1b9b6f3..23d091c 100644
--- a/doc/apk.8.scd
+++ b/doc/apk.8.scd
@@ -161,8 +161,10 @@ The following options are available for all commands.
Write progress to the specified file descriptor.
*--purge*
- Delete modified configuration files on package removal and uninstalled
- packages from cache on cache clean.
+ Purge modified configuration and cached packages. Enables deletion of
+ modified configuration files on package removal. On cache clean action
+ this enables deletion of unneeded cached packages (uninstalled packages
+ on tmpfs installations or all packages on disk installations).
*--repositories-file* _REPOFILE_
Override system repositories, see *apk-repositories*(8). Specifying this
diff --git a/src/app_cache.c b/src/app_cache.c
index 7239faa..13cd6ce 100644
--- a/src/app_cache.c
+++ b/src/app_cache.c
@@ -151,7 +151,9 @@ static void cache_clean_item(struct apk_database *db, int static_cache, int dirf
if (!static_cache) {
if (strcmp(name, "installed") == 0) return;
if (pkg) {
- if ((apk_flags & APK_PURGE) && pkg->ipkg == NULL) goto delete;
+ if (apk_flags & APK_PURGE) {
+ if (db->permanent || !pkg->ipkg) goto delete;
+ }
if (pkg->repos & db->local_repos & ~BIT(APK_REPOSITORY_CACHED)) goto delete;
if (pkg->ipkg == NULL && !(pkg->repos & ~BIT(APK_REPOSITORY_CACHED))) goto delete;
return;
@@ -193,13 +195,16 @@ static int cache_main(void *ctx, struct apk_database *db, struct apk_string_arra
return -EINVAL;
arg = args->item[0];
- if (strcmp(arg, "sync") == 0)
+ if (strcmp(arg, "sync") == 0) {
actions = CACHE_CLEAN | CACHE_DOWNLOAD;
- else if (strcmp(arg, "clean") == 0)
+ } else if (strcmp(arg, "clean") == 0) {
actions = CACHE_CLEAN;
- else if (strcmp(arg, "download") == 0)
+ } else if (strcmp(arg, "purge") == 0) {
+ actions = CACHE_CLEAN;
+ apk_flags |= APK_PURGE;
+ } else if (strcmp(arg, "download") == 0) {
actions = CACHE_DOWNLOAD;
- else
+ } else
return -EINVAL;
if (!apk_db_cache_active(db))