diff options
-rw-r--r-- | src/apk_database.h | 1 | ||||
-rw-r--r-- | src/database.c | 26 | ||||
-rw-r--r-- | src/package.c | 7 | ||||
-rw-r--r-- | src/solver.c | 15 |
4 files changed, 31 insertions, 18 deletions
diff --git a/src/apk_database.h b/src/apk_database.h index e5d28f4..2d3b51f 100644 --- a/src/apk_database.h +++ b/src/apk_database.h @@ -153,6 +153,7 @@ struct apk_database { unsigned files; unsigned dirs; unsigned packages; + size_t bytes; } stats; } installed; }; diff --git a/src/database.c b/src/database.c index 8eaba6c..3435eaf 100644 --- a/src/database.c +++ b/src/database.c @@ -592,8 +592,12 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo) if (pkg == NULL) continue; - if (repo >= 0) + if (repo >= 0) { pkg->repos |= BIT(repo); + } else if (repo == -1 && ipkg == NULL) { + /* Installed package without files */ + ipkg = apk_pkg_install(db, pkg); + } if (apk_db_pkg_add(db, pkg) == NULL) { apk_error("Installed database load failed"); @@ -620,15 +624,15 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo) /* Standard index line? */ r = apk_pkg_add_info(db, pkg, field, l); if (r == 0) { - if (repo == -1 && field == 'S') { - /* Instert to installed database; this needs to - * happen after package name has been read, but - * before first FDB entry. */ - ipkg = apk_pkg_install(db, pkg); - diri_node = hlist_tail_ptr(&ipkg->owned_dirs); - } continue; } + if (r == 1 && repo == -1) { + /* Instert to installed database; this needs to + * happen after package name has been read, but + * before first FDB entry. */ + ipkg = apk_pkg_install(db, pkg); + diri_node = hlist_tail_ptr(&ipkg->owned_dirs); + } if (repo != -1 || ipkg == NULL) continue; @@ -668,12 +672,10 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo) apk_blob_pull_csum(&l, &file->csum); break; case 'r': - if (ipkg != NULL) - apk_blob_pull_deps(&l, db, &ipkg->replaces); + apk_blob_pull_deps(&l, db, &ipkg->replaces); break; case 'q': - if (ipkg != NULL) - ipkg->replaces_priority = apk_blob_pull_uint(&l, 10); + ipkg->replaces_priority = apk_blob_pull_uint(&l, 10); break; default: if (r != 0 && !(apk_flags & APK_FORCE)) { diff --git a/src/package.c b/src/package.c index 1c7bd2d..0283c25 100644 --- a/src/package.c +++ b/src/package.c @@ -82,6 +82,7 @@ struct apk_installed_package *apk_pkg_install(struct apk_database *db, /* Overlay override information resides in a nameless package */ if (pkg->name != NULL) { db->installed.stats.packages++; + db->installed.stats.bytes += pkg->installed_size; list_add_tail(&ipkg->installed_pkgs_list, &db->installed.packages); } @@ -97,8 +98,10 @@ void apk_pkg_uninstall(struct apk_database *db, struct apk_package *pkg) if (ipkg == NULL) return; - if (db != NULL) + if (db != NULL) { db->installed.stats.packages--; + db->installed.stats.bytes -= pkg->installed_size; + } list_del(&ipkg->installed_pkgs_list); @@ -729,7 +732,7 @@ int apk_pkg_add_info(struct apk_database *db, struct apk_package *pkg, db->compat_notinstallable = 1; } db->compat_newfeatures = 1; - return 1; + return 2; } if (APK_BLOB_IS_NULL(value)) return -1; diff --git a/src/solver.c b/src/solver.c index 644408b..965694b 100644 --- a/src/solver.c +++ b/src/solver.c @@ -1331,10 +1331,17 @@ all_done: apk_db_write_config(db); if (r == 0 && !db->performing_self_update) { - apk_message("OK: %d packages, %d dirs, %d files", - db->installed.stats.packages, - db->installed.stats.dirs, - db->installed.stats.files); + if (apk_verbosity > 1) { + apk_message("OK: %d packages, %d dirs, %d files, %zu MiB", + db->installed.stats.packages, + db->installed.stats.dirs, + db->installed.stats.files, + db->installed.stats.bytes / (1024 * 1024)); + } else { + apk_message("OK: %zu MiB in %d packages", + db->installed.stats.bytes / (1024 * 1024), + db->installed.stats.packages); + } } return r; |