diff --git a/src/apk.c b/src/apk.c index 6e21072..93be9df 100644 --- a/src/apk.c +++ b/src/apk.c @@ -41,6 +41,7 @@ static struct apk_option generic_options[] = { { 'v', "verbose", "Print more information" }, { 'V', "version", "Print program version and exit" }, { 'f', "force", "Do what was asked even if it looks dangerous" }, + { 'U', "update-cache", "Update the repository cache" }, { 0x101, "progress", "Show a progress bar" }, { 0x102, "clean-protected", "Do not create .apk-new files to " "configuration dirs" }, @@ -324,6 +325,9 @@ int main(int argc, char **argv) case 'f': apk_flags |= APK_FORCE; break; + case 'U': + apk_flags |= APK_UPDATE_CACHE; + break; case 0x101: apk_flags |= APK_PROGRESS; break; diff --git a/src/apk_defines.h b/src/apk_defines.h index 09d2a80..755d971 100644 --- a/src/apk_defines.h +++ b/src/apk_defines.h @@ -46,6 +46,7 @@ extern unsigned int apk_flags; #define APK_UPGRADE 0x0010 #define APK_RECURSIVE 0x0020 #define APK_PREFER_AVAILABLE 0x0040 +#define APK_UPDATE_CACHE 0x0080 #define apk_error(args...) apk_log("ERROR: ", args); #define apk_warning(args...) if (apk_verbosity > 0) { apk_log("WARNING: ", args); } diff --git a/src/cache.c b/src/cache.c index 2e9dda7..6efbfe1 100644 --- a/src/cache.c +++ b/src/cache.c @@ -11,6 +11,7 @@ #include #include +#include #include "apk_defines.h" #include "apk_applet.h" diff --git a/src/database.c b/src/database.c index 729d604..2b20c8f 100644 --- a/src/database.c +++ b/src/database.c @@ -1026,7 +1026,7 @@ int apk_db_add_repository(apk_database_t _db, apk_blob_t repository) struct apk_istream *is = NULL; struct apk_bstream *bs = NULL; struct apk_repository *repo; - int r, n; + int r, n = 1; if (repository.ptr == NULL || *repository.ptr == '\0' || *repository.ptr == '#') @@ -1045,9 +1045,13 @@ int apk_db_add_repository(apk_database_t _db, apk_blob_t repository) if (apk_url_local_file(repo->url) == NULL) { csum_blob(repository, repo->url_csum); + if (apk_flags & APK_UPDATE_CACHE) + n = apk_repository_update(db, repo); + bs = apk_db_cache_open(db, repo->url_csum, apk_index_gz); if (bs == NULL) { - n = apk_repository_update(db, repo); + if (n == 1) + n = apk_repository_update(db, repo); if (n < 0) return n; bs = apk_db_cache_open(db, repo->url_csum,