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.cute-signatures
parent
3cb5ce2a37
commit
16e0f6df7f
|
@ -101,6 +101,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->version = apk_atomize_dup(&db->atoms, APK_BLOB_STR(ver));
|
||||||
virtpkg->description = strdup("virtual meta package");
|
virtpkg->description = strdup("virtual meta package");
|
||||||
virtpkg->arch = apk_atomize(&db->atoms, APK_BLOB_STR("noarch"));
|
virtpkg->arch = apk_atomize(&db->atoms, APK_BLOB_STR("noarch"));
|
||||||
|
virtpkg->repos |= BIT(APK_REPOSITORY_CACHED);
|
||||||
|
|
||||||
apk_digest_ctx_init(&dctx, APK_DIGEST_SHA1);
|
apk_digest_ctx_init(&dctx, APK_DIGEST_SHA1);
|
||||||
apk_digest_ctx_update(&dctx, &tm, sizeof tm);
|
apk_digest_ctx_update(&dctx, &tm, sizeof tm);
|
||||||
|
|
|
@ -91,7 +91,7 @@ static int cache_download(struct cache_ctx *cctx, struct apk_database *db)
|
||||||
|
|
||||||
foreach_array_item(change, changeset.changes) {
|
foreach_array_item(change, changeset.changes) {
|
||||||
pkg = change->new_pkg;
|
pkg = change->new_pkg;
|
||||||
if ((pkg == NULL) || (pkg->repos & db->local_repos))
|
if (!pkg || (pkg->repos & db->local_repos) || !pkg->installed_size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
repo = apk_db_select_repo(db, pkg);
|
repo = apk_db_select_repo(db, pkg);
|
||||||
|
|
|
@ -425,7 +425,7 @@ static void print_pinning_errors(struct print_state *ps, struct apk_package *pkg
|
||||||
if (!(pkg->repos & db->available_repos)) {
|
if (!(pkg->repos & db->available_repos)) {
|
||||||
label_start(ps, "masked in:");
|
label_start(ps, "masked in:");
|
||||||
apk_print_indented_fmt(&ps->i, "--no-network");
|
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:");
|
label_start(ps, "masked in:");
|
||||||
apk_print_indented_fmt(&ps->i, "cache");
|
apk_print_indented_fmt(&ps->i, "cache");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -533,10 +533,8 @@ struct apk_package *apk_db_pkg_add(struct apk_database *db, struct apk_package *
|
||||||
|
|
||||||
if (!pkg->license) pkg->license = &apk_atom_null;
|
if (!pkg->license) pkg->license = &apk_atom_null;
|
||||||
|
|
||||||
/* Set as "cached" if installing from specified file, and
|
// Set as "cached" if installing from specified file
|
||||||
* for virtual packages */
|
if (pkg->filename) pkg->repos |= BIT(APK_REPOSITORY_CACHED);
|
||||||
if (pkg->filename != NULL || pkg->installed_size == 0)
|
|
||||||
pkg->repos |= BIT(APK_REPOSITORY_CACHED);
|
|
||||||
|
|
||||||
idb = apk_hash_get(&db->available.packages, APK_BLOB_CSUM(pkg->csum));
|
idb = apk_hash_get(&db->available.packages, APK_BLOB_CSUM(pkg->csum));
|
||||||
if (idb == NULL) {
|
if (idb == NULL) {
|
||||||
|
@ -1227,8 +1225,7 @@ static int apk_db_index_write_nr_cache(struct apk_database *db)
|
||||||
struct apk_ostream *os;
|
struct apk_ostream *os;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!apk_db_cache_active(db))
|
if (!apk_db_cache_active(db)) return 0;
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Write list of installed non-repository packages to
|
/* Write list of installed non-repository packages to
|
||||||
* cached index file */
|
* cached index file */
|
||||||
|
@ -1238,16 +1235,14 @@ static int apk_db_index_write_nr_cache(struct apk_database *db)
|
||||||
ctx.os = os;
|
ctx.os = os;
|
||||||
list_for_each_entry(ipkg, &db->installed.packages, installed_pkgs_list) {
|
list_for_each_entry(ipkg, &db->installed.packages, installed_pkgs_list) {
|
||||||
struct apk_package *pkg = ipkg->pkg;
|
struct apk_package *pkg = ipkg->pkg;
|
||||||
if (pkg->repos != BIT(APK_REPOSITORY_CACHED))
|
if ((pkg->repos == BIT(APK_REPOSITORY_CACHED) ||
|
||||||
continue;
|
(pkg->repos == 0 && !pkg->installed_size))) {
|
||||||
r = write_index_entry(pkg, &ctx);
|
r = write_index_entry(pkg, &ctx);
|
||||||
if (r != 0)
|
if (r != 0) return r;
|
||||||
return r;
|
}
|
||||||
}
|
}
|
||||||
r = apk_ostream_close(os);
|
r = apk_ostream_close(os);
|
||||||
if (r < 0)
|
if (r < 0) return r;
|
||||||
return r;
|
|
||||||
|
|
||||||
return ctx.count;
|
return ctx.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue