From f74ca42e0fa5bf131644a46d8259edd493bf072c Mon Sep 17 00:00:00 2001 From: Christian Marangi Date: Wed, 23 Oct 2024 01:11:01 +0200 Subject: [PATCH] app_list: add full print Add full print variant to dump info about each package. Signed-off-by: Christian Marangi --- src/app_list.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) --- a/src/app_list.c +++ b/src/app_list.c @@ -49,12 +49,53 @@ struct list_ctx { unsigned int match_providers : 1; unsigned int match_depends : 1; unsigned int manifest : 1; + unsigned int installed : 1; /* Solely for print_full patch */ + unsigned int full : 1; }; +static void print_full(const struct apk_package *pkg, const struct list_ctx *ctx) +{ + struct apk_dependency d; + + printf("Package: %s\n", pkg->name->name); + printf("Version: " BLOB_FMT "\n", BLOB_PRINTF(*pkg->version)); + if (apk_array_len(pkg->depends)) { + int i = 0; + + printf("Depends: "); + apk_array_foreach(d, pkg->depends) { + i++; + printf("%s%s", d->name->name, i < apk_array_len(pkg->depends) ? ", ": "\n"); + } + } + if (apk_array_len(pkg->provides)) { + int i = 0; + + printf("Provides: "); + apk_array_foreach(d, pkg->provides) { + i++; + printf("%s%s", d->name->name, i < apk_array_len(pkg->provides) ? ", ": "\n"); + } + } + if (pkg->ipkg && ctx->installed) + printf("Status: install ok %s\n", pkg->marked ? "hold" : "installed"); + if (pkg->description) + printf("Description: " BLOB_FMT "\n", BLOB_PRINTF(*pkg->description)); + printf("License: " BLOB_FMT "\n", BLOB_PRINTF(*pkg->license)); + printf("Installed-Size: %zu\n", pkg->installed_size); + printf("Size: %zu\n", pkg->size); + printf("\n"); +} + static void print_package(const struct apk_database *db, const struct apk_name *name, const struct apk_package *pkg, const struct list_ctx *ctx) { if (ctx->match_providers) printf("<%s> ", name->name); + if (ctx->full) { + print_full(pkg, ctx); + return; + } + if (ctx->manifest) { printf("%s " BLOB_FMT "\n", pkg->name->name, BLOB_PRINTF(*pkg->version)); return; @@ -96,6 +137,7 @@ static void print_package(const struct apk_database *db, const struct apk_name * OPT(OPT_LIST_depends, APK_OPT_SH("d") "depends") \ OPT(OPT_LIST_installed, APK_OPT_SH("I")) \ OPT(OPT_LIST_manifest, "manifest") \ + OPT(OPT_LIST_full, "full") \ OPT(OPT_LIST_origin, APK_OPT_SH("o") "origin") \ OPT(OPT_LIST_orphaned, APK_OPT_SH("O")) \ OPT(OPT_LIST_providers, APK_OPT_SH("P") "providers") \ @@ -109,6 +151,9 @@ static int list_parse_option(void *pctx, struct apk_ctx *ac, int opt, const char struct apk_query_spec *qs = &ac->query; switch (opt) { + case OPT_LIST_full: + ctx->full = 1; + break; case OPT_LIST_available: qs->filter.available = 1; break; @@ -117,6 +162,7 @@ static int list_parse_option(void *pctx, struct apk_ctx *ac, int opt, const char break; case OPT_LIST_installed: installed: + ctx->installed = 1; qs->filter.installed = 1; ac->open_flags |= APK_OPENF_NO_SYS_REPOS; break;