diff options
author | Timo Teräs <timo.teras@iki.fi> | 2021-11-15 13:35:59 +0200 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2021-12-14 20:58:02 +0200 |
commit | 74f67ab81c646b9c1fb1136776cf05a949de2526 (patch) | |
tree | 690373e31faacc5d0a56dc40f49c4fbb9c44a137 | |
parent | 5eb7f989c0d901d9f10c03dee184abda1eaaf130 (diff) | |
download | apk-tools-74f67ab81c646b9c1fb1136776cf05a949de2526.tar.gz apk-tools-74f67ab81c646b9c1fb1136776cf05a949de2526.tar.bz2 apk-tools-74f67ab81c646b9c1fb1136776cf05a949de2526.tar.xz apk-tools-74f67ab81c646b9c1fb1136776cf05a949de2526.zip |
fix fetching of depdencies only packages
Remove the APK_REPOSITORY_CACHED bit from dependencies only
packages (that is, installed_size == 0). For fetch, the problem
is that apk_db_select_repo() would return the cache repository,
but the package would not be there. Update also the locations
needed to handle these packages correctly without the cached
repository bit being set.
-rw-r--r-- | src/app_add.c | 1 | ||||
-rw-r--r-- | src/app_cache.c | 2 | ||||
-rw-r--r-- | src/commit.c | 2 | ||||
-rw-r--r-- | src/database.c | 23 |
4 files changed, 12 insertions, 16 deletions
diff --git a/src/app_add.c b/src/app_add.c index 4bc9894..1472506 100644 --- a/src/app_add.c +++ b/src/app_add.c @@ -96,6 +96,7 @@ static struct apk_package *create_virtual_package(struct apk_database *db, struc virtpkg->version = apk_atomize_dup(&db->atoms, APK_BLOB_STR(ver)); virtpkg->description = strdup("virtual meta package"); virtpkg->arch = apk_atomize(&db->atoms, APK_BLOB_STR("noarch")); + virtpkg->repos |= BIT(APK_REPOSITORY_CACHED); mdctx = EVP_MD_CTX_new(); EVP_DigestInit_ex(mdctx, apk_checksum_default(), NULL); diff --git a/src/app_cache.c b/src/app_cache.c index f4dd951..c6b89e1 100644 --- a/src/app_cache.c +++ b/src/app_cache.c @@ -89,7 +89,7 @@ static int cache_download(struct cache_ctx *cctx, struct apk_database *db) foreach_array_item(change, changeset.changes) { pkg = change->new_pkg; - if ((pkg == NULL) || (pkg->repos & db->local_repos)) + if (!pkg || (pkg->repos & db->local_repos) || !pkg->installed_size) continue; repo = apk_db_select_repo(db, pkg); diff --git a/src/commit.c b/src/commit.c index fe9b1ad..c01a39b 100644 --- a/src/commit.c +++ b/src/commit.c @@ -421,7 +421,7 @@ static void print_pinning_errors(struct print_state *ps, struct apk_package *pkg if (!(pkg->repos & db->available_repos)) { label_start(ps, "masked in:"); apk_print_indented_fmt(&ps->i, "--no-network"); - } else if (pkg->repos == BIT(APK_REPOSITORY_CACHED) && !(pkg->filename != NULL || pkg->installed_size == 0)) { + } else if (pkg->repos == BIT(APK_REPOSITORY_CACHED) && !pkg->filename) { label_start(ps, "masked in:"); apk_print_indented_fmt(&ps->i, "cache"); } else { diff --git a/src/database.c b/src/database.c index f059412..d0f064d 100644 --- a/src/database.c +++ b/src/database.c @@ -523,10 +523,8 @@ struct apk_package *apk_db_pkg_add(struct apk_database *db, struct apk_package * if (!pkg->license) pkg->license = &apk_atom_null; - /* Set as "cached" if installing from specified file, and - * for virtual packages */ - if (pkg->filename != NULL || pkg->installed_size == 0) - pkg->repos |= BIT(APK_REPOSITORY_CACHED); + // Set as "cached" if installing from specified file + if (pkg->filename) pkg->repos |= BIT(APK_REPOSITORY_CACHED); idb = apk_hash_get(&db->available.packages, APK_BLOB_CSUM(pkg->csum)); if (idb == NULL) { @@ -1220,8 +1218,7 @@ static int apk_db_index_write_nr_cache(struct apk_database *db) struct apk_ostream *os; int r; - if (!apk_db_cache_active(db)) - return 0; + if (!apk_db_cache_active(db)) return 0; /* Write list of installed non-repository packages to * cached index file */ @@ -1234,16 +1231,14 @@ static int apk_db_index_write_nr_cache(struct apk_database *db) ctx.os = os; list_for_each_entry(ipkg, &db->installed.packages, installed_pkgs_list) { struct apk_package *pkg = ipkg->pkg; - if (pkg->repos != BIT(APK_REPOSITORY_CACHED)) - continue; - r = write_index_entry(pkg, &ctx); - if (r != 0) - return r; + if ((pkg->repos == BIT(APK_REPOSITORY_CACHED) || + (pkg->repos == 0 && !pkg->installed_size))) { + r = write_index_entry(pkg, &ctx); + if (r != 0) return r; + } } r = apk_ostream_close(os); - if (r < 0) - return r; - + if (r < 0) return r; return ctx.count; } |