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 /src | |
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.
Diffstat (limited to 'src')
-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; } |