solver: fix installation of non-repository packages during tmpfs boot
allow packages in the cache's installed to be selected for installation by the solver. add test case for the issue.cute-signatures
parent
7e64edfad6
commit
1dc70477b5
|
@ -114,9 +114,10 @@ struct apk_package {
|
||||||
struct apk_dependency_array *depends, *install_if, *provides;
|
struct apk_dependency_array *depends, *install_if, *provides;
|
||||||
size_t installed_size, size;
|
size_t installed_size, size;
|
||||||
time_t build_time;
|
time_t build_time;
|
||||||
|
unsigned repos : APK_MAX_REPOS;
|
||||||
unsigned marked : 1;
|
unsigned marked : 1;
|
||||||
unsigned uninstallable : 1;
|
unsigned uninstallable : 1;
|
||||||
unsigned repos : APK_MAX_REPOS;
|
unsigned cached_non_repository : 1;
|
||||||
struct apk_checksum csum;
|
struct apk_checksum csum;
|
||||||
};
|
};
|
||||||
APK_ARRAY(apk_package_array, struct apk_package *);
|
APK_ARRAY(apk_package_array, struct apk_package *);
|
||||||
|
|
|
@ -379,6 +379,9 @@ 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)) {
|
||||||
|
label_start(ps, "masked in:");
|
||||||
|
apk_print_indented_fmt(&ps->i, "cache");
|
||||||
} else {
|
} else {
|
||||||
if (pkg->repos & apk_db_get_pinning_mask_repos(db, APK_DEFAULT_PINNING_MASK | BIT(tag)))
|
if (pkg->repos & apk_db_get_pinning_mask_repos(db, APK_DEFAULT_PINNING_MASK | BIT(tag)))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -760,6 +760,8 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo)
|
||||||
|
|
||||||
if (repo >= 0) {
|
if (repo >= 0) {
|
||||||
pkg->repos |= BIT(repo);
|
pkg->repos |= BIT(repo);
|
||||||
|
} else if (repo == -2) {
|
||||||
|
pkg->cached_non_repository = 1;
|
||||||
} else if (repo == -1 && ipkg == NULL) {
|
} else if (repo == -1 && ipkg == NULL) {
|
||||||
/* Installed package without files */
|
/* Installed package without files */
|
||||||
ipkg = apk_pkg_install(db, pkg);
|
ipkg = apk_pkg_install(db, pkg);
|
||||||
|
|
|
@ -197,6 +197,7 @@ static void discover_name(struct apk_solver_state *ss, struct apk_name *name)
|
||||||
* or it's a 'virtual' package with install_size zero */
|
* or it's a 'virtual' package with install_size zero */
|
||||||
pkg->ss.pkg_selectable =
|
pkg->ss.pkg_selectable =
|
||||||
(pkg->repos & db->available_repos) ||
|
(pkg->repos & db->available_repos) ||
|
||||||
|
pkg->cached_non_repository ||
|
||||||
pkg->ipkg;
|
pkg->ipkg;
|
||||||
|
|
||||||
/* Prune install_if packages that are no longer available,
|
/* Prune install_if packages that are no longer available,
|
||||||
|
@ -212,8 +213,11 @@ static void discover_name(struct apk_solver_state *ss, struct apk_name *name)
|
||||||
pkg->ss.tag_preferred =
|
pkg->ss.tag_preferred =
|
||||||
(pkg->filename != NULL) ||
|
(pkg->filename != NULL) ||
|
||||||
(pkg->installed_size == 0) ||
|
(pkg->installed_size == 0) ||
|
||||||
!!(repos & ss->default_repos);
|
(repos & ss->default_repos);
|
||||||
pkg->ss.tag_ok = pkg->ss.tag_preferred || pkg->ipkg;
|
pkg->ss.tag_ok =
|
||||||
|
pkg->ss.tag_preferred ||
|
||||||
|
pkg->cached_non_repository ||
|
||||||
|
pkg->ipkg;
|
||||||
|
|
||||||
foreach_array_item(dep, pkg->depends) {
|
foreach_array_item(dep, pkg->depends) {
|
||||||
discover_name(ss, dep->name);
|
discover_name(ss, dep->name);
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
@ARGS
|
||||||
|
--no-network
|
||||||
|
--test-repo !basic.repo
|
||||||
|
add a
|
||||||
|
@EXPECT
|
||||||
|
(1/2) Installing b (2)
|
||||||
|
(2/2) Installing a (2)
|
||||||
|
OK: 0 MiB in 0 packages
|
Loading…
Reference in New Issue