From d7650fc5e5a0119879d536b2c3c99ce85befd221 Mon Sep 17 00:00:00 2001 From: Timo Teräs Date: Tue, 11 Apr 2023 20:34:15 +0300 Subject: apk: add --force-missing-repositories --- doc/apk.8.scd | 3 +++ src/apk.c | 4 ++++ src/apk_database.h | 1 + src/apk_defines.h | 1 + src/app_cache.c | 7 +------ src/app_upgrade.c | 5 +---- src/database.c | 9 +++++++++ 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/apk.8.scd b/doc/apk.8.scd index 2b31b64..aa4b60c 100644 --- a/doc/apk.8.scd +++ b/doc/apk.8.scd @@ -120,6 +120,9 @@ The following options are available for all commands. *--force-broken-world* Continue even if _world_ cannot be satisfied. +*--force-missing-repositories* + Continue even if some of the repository indexes are not available. + *--force-non-repository* Continue even if packages may be lost on reboot. This can happen when running in run-from-tmpfs mode, and installing non-repository package. diff --git a/src/apk.c b/src/apk.c index a101cf6..7505b1c 100644 --- a/src/apk.c +++ b/src/apk.c @@ -78,6 +78,7 @@ static struct apk_repository_list *apk_repository_new(const char *url) OPT(OPT_GLOBAL_force, APK_OPT_SH("f") "force") \ OPT(OPT_GLOBAL_force_binary_stdout, "force-binary-stdout") \ OPT(OPT_GLOBAL_force_broken_world, "force-broken-world") \ + OPT(OPT_GLOBAL_force_missing_repositories, "force-missing-repositories") \ OPT(OPT_GLOBAL_force_non_repository, "force-non-repository") \ OPT(OPT_GLOBAL_force_old_apk, "force-old-apk") \ OPT(OPT_GLOBAL_force_overwrite, "force-overwrite") \ @@ -167,6 +168,9 @@ static int option_parse_global(void *ctx, struct apk_db_options *dbopts, int opt case OPT_GLOBAL_force_binary_stdout: apk_force |= APK_FORCE_BINARY_STDOUT; break; + case OPT_GLOBAL_force_missing_repositories: + apk_force |= APK_FORCE_MISSING_REPOSITORIES; + break; case OPT_GLOBAL_interactive: apk_flags |= APK_INTERACTIVE; break; diff --git a/src/apk_database.h b/src/apk_database.h index d63da2d..52578d7 100644 --- a/src/apk_database.h +++ b/src/apk_database.h @@ -262,6 +262,7 @@ int apk_db_index_read(struct apk_database *db, struct apk_istream *is, int repo) int apk_db_index_read_file(struct apk_database *db, const char *file, int repo); int apk_db_index_write(struct apk_database *db, struct apk_ostream *os); +int apk_db_repository_check(struct apk_database *db); int apk_db_add_repository(apk_database_t db, apk_blob_t repository); struct apk_repository *apk_db_select_repo(struct apk_database *db, struct apk_package *pkg); diff --git a/src/apk_defines.h b/src/apk_defines.h index 8224acf..a9c06aa 100644 --- a/src/apk_defines.h +++ b/src/apk_defines.h @@ -91,6 +91,7 @@ extern char **apk_argv; #define APK_FORCE_REFRESH BIT(3) #define APK_FORCE_NON_REPOSITORY BIT(4) #define APK_FORCE_BINARY_STDOUT BIT(5) +#define APK_FORCE_MISSING_REPOSITORIES BIT(6) /* default architecture for APK packages. */ #if defined(__x86_64__) diff --git a/src/app_cache.c b/src/app_cache.c index 13cd6ce..f40c836 100644 --- a/src/app_cache.c +++ b/src/app_cache.c @@ -211,18 +211,13 @@ static int cache_main(void *ctx, struct apk_database *db, struct apk_string_arra actions &= CACHE_CLEAN; if ((actions & CACHE_DOWNLOAD) && (cctx->solver_flags || cctx->add_dependencies)) { - if (db->repositories.stale || db->repositories.unavailable) { - apk_error("Not continuing due to stale/unavailable repositories."); - r = 3; - goto err; - } + if (apk_db_repository_check(db) != 0) return 3; } if (r == 0 && (actions & CACHE_CLEAN)) r = cache_clean(db); if (r == 0 && (actions & CACHE_DOWNLOAD)) r = cache_download(cctx, db, args); -err: return r; } diff --git a/src/app_upgrade.c b/src/app_upgrade.c index c618cb6..d201b2e 100644 --- a/src/app_upgrade.c +++ b/src/app_upgrade.c @@ -164,10 +164,7 @@ static int upgrade_main(void *ctx, struct apk_database *db, struct apk_string_ar "Use --force-broken-world to override."); return -1; } - if (db->repositories.stale || db->repositories.unavailable) { - apk_error("Not continuing due to stale/unavailable repositories."); - return -1; - } + if (apk_db_repository_check(db) != 0) return -1; solver_flags = APK_SOLVERF_UPGRADE | uctx->solver_flags; if (!uctx->no_self_upgrade && !args->num) { diff --git a/src/database.c b/src/database.c index 140a9ef..13ce02f 100644 --- a/src/database.c +++ b/src/database.c @@ -2278,6 +2278,15 @@ int apk_db_index_read_file(struct apk_database *db, const char *file, int repo) return load_index(db, apk_istream_from_file(AT_FDCWD, file), targz, repo); } +int apk_db_repository_check(struct apk_database *db) +{ + if (apk_force & APK_FORCE_MISSING_REPOSITORIES) return 0; + if (!db->repositories.stale && !db->repositories.unavailable) return 0; + apk_error("Not continuing due to stale/unavailable repositories." + "Use --force-missing-repositories to continue."); + return -1; +} + int apk_db_add_repository(apk_database_t _db, apk_blob_t _repository) { struct apk_database *db = _db.db; -- cgit v1.2.3-60-g2f50