add, del, db: fix various bugs introduced by earlier commits
- make virtual packages work again - make apk del (for non-empty packages) work againcute-signatures
parent
892395d594
commit
6c96730cdf
|
@ -116,9 +116,10 @@ static int add_main(void *ctx, struct apk_database *db, int argc, char **argv)
|
||||||
|
|
||||||
if (virtpkg)
|
if (virtpkg)
|
||||||
apk_deps_add(&virtpkg->depends, &dep);
|
apk_deps_add(&virtpkg->depends, &dep);
|
||||||
else
|
else {
|
||||||
deps[i] = dep;
|
deps[i] = dep;
|
||||||
deps[i].name->flags |= APK_NAME_TOPLEVEL_OVERRIDE;
|
deps[i].name->flags |= APK_NAME_TOPLEVEL_OVERRIDE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (virtpkg)
|
if (virtpkg)
|
||||||
deps[0] = virtdep;
|
deps[0] = virtdep;
|
||||||
|
|
|
@ -518,8 +518,12 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo)
|
||||||
if (pkg == NULL) {
|
if (pkg == NULL) {
|
||||||
pkg = apk_pkg_new();
|
pkg = apk_pkg_new();
|
||||||
diri = NULL;
|
diri = NULL;
|
||||||
diri_node = NULL;
|
|
||||||
file_diri_node = NULL;
|
file_diri_node = NULL;
|
||||||
|
|
||||||
|
if (repo == -1) {
|
||||||
|
ipkg = apk_pkg_install(db, pkg);
|
||||||
|
diri_node = hlist_tail_ptr(&ipkg->owned_dirs);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Standard index line? */
|
/* Standard index line? */
|
||||||
|
@ -531,12 +535,6 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the installation entry */
|
|
||||||
if (ipkg == NULL) {
|
|
||||||
ipkg = apk_pkg_install(db, pkg);
|
|
||||||
diri_node = hlist_tail_ptr(&ipkg->owned_dirs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check FDB special entries */
|
/* Check FDB special entries */
|
||||||
switch (field) {
|
switch (field) {
|
||||||
case 'F':
|
case 'F':
|
||||||
|
@ -763,7 +761,8 @@ static void apk_db_triggers_write(struct apk_database *db, struct apk_ostream *o
|
||||||
list_for_each_entry(ipkg, &db->installed.triggers, trigger_pkgs_list) {
|
list_for_each_entry(ipkg, &db->installed.triggers, trigger_pkgs_list) {
|
||||||
bfn = APK_BLOB_BUF(buf);
|
bfn = APK_BLOB_BUF(buf);
|
||||||
apk_blob_push_csum(&bfn, &ipkg->pkg->csum);
|
apk_blob_push_csum(&bfn, &ipkg->pkg->csum);
|
||||||
os->write(os, buf, buf - bfn.ptr);
|
os->write(os, buf, bfn.ptr - buf);
|
||||||
|
|
||||||
for (i = 0; i < ipkg->triggers->num; i++) {
|
for (i = 0; i < ipkg->triggers->num; i++) {
|
||||||
os->write(os, " ", 1);
|
os->write(os, " ", 1);
|
||||||
apk_ostream_write_string(os, ipkg->triggers->item[i]);
|
apk_ostream_write_string(os, ipkg->triggers->item[i]);
|
||||||
|
@ -1250,8 +1249,6 @@ int apk_db_run_triggers(struct apk_database *db)
|
||||||
if (ipkg->pending_triggers == NULL)
|
if (ipkg->pending_triggers == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
fprintf(stderr, "run triggers: %s\n", ipkg->pkg->name->name);
|
|
||||||
|
|
||||||
*apk_string_array_add(&ipkg->pending_triggers) = NULL;
|
*apk_string_array_add(&ipkg->pending_triggers) = NULL;
|
||||||
apk_ipkg_run_script(ipkg, db->root_fd, APK_SCRIPT_TRIGGER,
|
apk_ipkg_run_script(ipkg, db->root_fd, APK_SCRIPT_TRIGGER,
|
||||||
ipkg->pending_triggers->item);
|
ipkg->pending_triggers->item);
|
||||||
|
@ -1597,6 +1594,7 @@ static int read_info_line(void *_ctx, apk_blob_t line)
|
||||||
ipkg->triggers = NULL;
|
ipkg->triggers = NULL;
|
||||||
}
|
}
|
||||||
apk_blob_for_each_segment(r, " ", parse_triggers, ctx->ipkg);
|
apk_blob_for_each_segment(r, " ", parse_triggers, ctx->ipkg);
|
||||||
|
|
||||||
if (ctx->ipkg->triggers && !list_hashed(&ipkg->trigger_pkgs_list))
|
if (ctx->ipkg->triggers && !list_hashed(&ipkg->trigger_pkgs_list))
|
||||||
list_add_tail(&ipkg->trigger_pkgs_list,
|
list_add_tail(&ipkg->trigger_pkgs_list,
|
||||||
&db->installed.triggers);
|
&db->installed.triggers);
|
||||||
|
@ -1786,7 +1784,7 @@ static void apk_db_purge_pkg(struct apk_database *db,
|
||||||
struct apk_file_info fi;
|
struct apk_file_info fi;
|
||||||
struct hlist_node *dc, *dn, *fc, *fn;
|
struct hlist_node *dc, *dn, *fc, *fn;
|
||||||
unsigned long hash;
|
unsigned long hash;
|
||||||
char name[1024];
|
char name[PATH_MAX];
|
||||||
|
|
||||||
hlist_for_each_entry_safe(diri, dc, dn, &ipkg->owned_dirs, pkg_dirs_list) {
|
hlist_for_each_entry_safe(diri, dc, dn, &ipkg->owned_dirs, pkg_dirs_list) {
|
||||||
if (exten == NULL)
|
if (exten == NULL)
|
||||||
|
|
|
@ -39,6 +39,7 @@ static int del_main(void *ctx, struct apk_database *db, int argc, char **argv)
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
name = apk_db_get_name(db, APK_BLOB_STR(argv[i]));
|
name = apk_db_get_name(db, APK_BLOB_STR(argv[i]));
|
||||||
name->flags &= ~APK_NAME_TOPLEVEL;
|
name->flags &= ~APK_NAME_TOPLEVEL;
|
||||||
|
name->flags |= APK_NAME_TOPLEVEL_OVERRIDE;
|
||||||
apk_deps_del(&db->world, name);
|
apk_deps_del(&db->world, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
17
src/state.c
17
src/state.c
|
@ -299,7 +299,7 @@ int apk_state_lock_dependency(struct apk_state *state,
|
||||||
for (i = 0; i < c->num; i++) {
|
for (i = 0; i < c->num; i++) {
|
||||||
struct apk_package *pkg = c->pkgs[i];
|
struct apk_package *pkg = c->pkgs[i];
|
||||||
|
|
||||||
if (c->pkgs[i]->ipkg != NULL)
|
if (pkg->ipkg != NULL)
|
||||||
installed = pkg;
|
installed = pkg;
|
||||||
else if (pkg->filename == NULL &&
|
else if (pkg->filename == NULL &&
|
||||||
apk_db_select_repo(state->db, pkg) == NULL)
|
apk_db_select_repo(state->db, pkg) == NULL)
|
||||||
|
@ -489,7 +489,7 @@ int apk_state_lock_name(struct apk_state *state,
|
||||||
struct apk_package *pkg = name->pkgs->item[i];
|
struct apk_package *pkg = name->pkgs->item[i];
|
||||||
|
|
||||||
if (name->pkgs->item[i]->name == name &&
|
if (name->pkgs->item[i]->name == name &&
|
||||||
name->pkgs->item[i]->ipkg != NULL)
|
pkg->ipkg != NULL)
|
||||||
oldpkg = pkg;
|
oldpkg = pkg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -544,8 +544,7 @@ static void apk_print_change(struct apk_database *db,
|
||||||
name->name, newpkg->version);
|
name->name, newpkg->version);
|
||||||
} else if (newpkg == NULL) {
|
} else if (newpkg == NULL) {
|
||||||
apk_message("Purging %s (%s)",
|
apk_message("Purging %s (%s)",
|
||||||
name->name,
|
name->name, oldpkg->version);
|
||||||
oldpkg->version);
|
|
||||||
} else {
|
} else {
|
||||||
r = apk_pkg_version_compare(newpkg, oldpkg);
|
r = apk_pkg_version_compare(newpkg, oldpkg);
|
||||||
switch (r) {
|
switch (r) {
|
||||||
|
@ -757,15 +756,15 @@ int apk_state_commit(struct apk_state *state,
|
||||||
"The following packages will be REMOVED");
|
"The following packages will be REMOVED");
|
||||||
r += dump_packages(state, cmp_downgrade,
|
r += dump_packages(state, cmp_downgrade,
|
||||||
"The following packages will be DOWNGRADED");
|
"The following packages will be DOWNGRADED");
|
||||||
if (r || apk_verbosity > 2) {
|
if (r || (apk_flags & APK_INTERACTIVE) || apk_verbosity > 2) {
|
||||||
dump_packages(state, cmp_new,
|
dump_packages(state, cmp_new,
|
||||||
"The following NEW packages will be installed");
|
"The following NEW packages will be installed");
|
||||||
dump_packages(state, cmp_upgrade,
|
dump_packages(state, cmp_upgrade,
|
||||||
"The following packages will be upgraded");
|
"The following packages will be upgraded");
|
||||||
fprintf(stderr, "%d kB of %s\n", abs(size_diff),
|
printf("%d kB of %s\n", abs(size_diff),
|
||||||
(size_diff < 0) ?
|
(size_diff < 0) ?
|
||||||
"disk space will be freed" :
|
"disk space will be freed" :
|
||||||
"additional disk space will be used");
|
"additional disk space will be used");
|
||||||
}
|
}
|
||||||
if (apk_flags & APK_INTERACTIVE) {
|
if (apk_flags & APK_INTERACTIVE) {
|
||||||
printf("Do you want to continue [Y/n]? ");
|
printf("Do you want to continue [Y/n]? ");
|
||||||
|
|
Loading…
Reference in New Issue