From 4d8a920366143c38d5bc521470e353c11e788b04 Mon Sep 17 00:00:00 2001 From: Timo Teräs Date: Thu, 23 Mar 2023 13:12:34 +0200 Subject: db, dot, fetch, info, list, search: support --from=FROMSPEC Allow omitting loading of system installed database and system repositories for the commands that operate on package indexes only. --- src/apk.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/apk.c') diff --git a/src/apk.c b/src/apk.c index 0c8286c..a101cf6 100644 --- a/src/apk.c +++ b/src/apk.c @@ -284,6 +284,43 @@ const struct apk_option_group optgroup_commit = { .parse = option_parse_commit, }; +#define SOURCE_OPTIONS(OPT) \ + OPT(OPT_SOURCE_from, APK_OPT_ARG "from") + +APK_OPT_GROUP(optiondesc_source, "Source", SOURCE_OPTIONS); + +static int option_parse_source(void *ctx, struct apk_db_options *dbopts, int opt, const char *optarg) +{ + const unsigned long all_flags = APK_OPENF_NO_SYS_REPOS | APK_OPENF_NO_INSTALLED_REPO | APK_OPENF_NO_INSTALLED; + unsigned long flags; + + switch (opt) { + case OPT_SOURCE_from: + if (strcmp(optarg, "none") == 0) { + flags = APK_OPENF_NO_SYS_REPOS | APK_OPENF_NO_INSTALLED_REPO | APK_OPENF_NO_INSTALLED; + } else if (strcmp(optarg, "repositories") == 0) { + flags = APK_OPENF_NO_INSTALLED_REPO | APK_OPENF_NO_INSTALLED; + } else if (strcmp(optarg, "installed") == 0) { + flags = APK_OPENF_NO_SYS_REPOS; + } else if (strcmp(optarg, "system") == 0) { + flags = 0; + } else + return -ENOTSUP; + + dbopts->open_flags &= ~all_flags; + dbopts->open_flags |= flags; + break; + default: + return -ENOTSUP; + } + return 0; +} + +const struct apk_option_group optgroup_source = { + .desc = optiondesc_source, + .parse = option_parse_source, +}; + static int usage(struct apk_applet *applet) { version(); -- cgit v1.2.3-70-g09d2