solver: report number of (mega)bytes used

cute-signatures
Timo Teräs 2011-12-27 14:06:03 +02:00
parent 83b098d357
commit 34756e6b87
4 changed files with 31 additions and 18 deletions

View File

@ -153,6 +153,7 @@ struct apk_database {
unsigned files; unsigned files;
unsigned dirs; unsigned dirs;
unsigned packages; unsigned packages;
size_t bytes;
} stats; } stats;
} installed; } installed;
}; };

View File

@ -592,8 +592,12 @@ int apk_db_index_read(struct apk_database *db, struct apk_bstream *bs, int repo)
if (pkg == NULL) if (pkg == NULL)
continue; continue;
if (repo >= 0) if (repo >= 0) {
pkg->repos |= BIT(repo); 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) { if (apk_db_pkg_add(db, pkg) == NULL) {
apk_error("Installed database load failed"); 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? */ /* Standard index line? */
r = apk_pkg_add_info(db, pkg, field, l); r = apk_pkg_add_info(db, pkg, field, l);
if (r == 0) { 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; 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) if (repo != -1 || ipkg == NULL)
continue; 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); apk_blob_pull_csum(&l, &file->csum);
break; break;
case 'r': case 'r':
if (ipkg != NULL) apk_blob_pull_deps(&l, db, &ipkg->replaces);
apk_blob_pull_deps(&l, db, &ipkg->replaces);
break; break;
case 'q': case 'q':
if (ipkg != NULL) ipkg->replaces_priority = apk_blob_pull_uint(&l, 10);
ipkg->replaces_priority = apk_blob_pull_uint(&l, 10);
break; break;
default: default:
if (r != 0 && !(apk_flags & APK_FORCE)) { if (r != 0 && !(apk_flags & APK_FORCE)) {

View File

@ -82,6 +82,7 @@ struct apk_installed_package *apk_pkg_install(struct apk_database *db,
/* Overlay override information resides in a nameless package */ /* Overlay override information resides in a nameless package */
if (pkg->name != NULL) { if (pkg->name != NULL) {
db->installed.stats.packages++; db->installed.stats.packages++;
db->installed.stats.bytes += pkg->installed_size;
list_add_tail(&ipkg->installed_pkgs_list, list_add_tail(&ipkg->installed_pkgs_list,
&db->installed.packages); &db->installed.packages);
} }
@ -97,8 +98,10 @@ void apk_pkg_uninstall(struct apk_database *db, struct apk_package *pkg)
if (ipkg == NULL) if (ipkg == NULL)
return; return;
if (db != NULL) if (db != NULL) {
db->installed.stats.packages--; db->installed.stats.packages--;
db->installed.stats.bytes -= pkg->installed_size;
}
list_del(&ipkg->installed_pkgs_list); 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_notinstallable = 1;
} }
db->compat_newfeatures = 1; db->compat_newfeatures = 1;
return 1; return 2;
} }
if (APK_BLOB_IS_NULL(value)) if (APK_BLOB_IS_NULL(value))
return -1; return -1;

View File

@ -1331,10 +1331,17 @@ all_done:
apk_db_write_config(db); apk_db_write_config(db);
if (r == 0 && !db->performing_self_update) { if (r == 0 && !db->performing_self_update) {
apk_message("OK: %d packages, %d dirs, %d files", if (apk_verbosity > 1) {
db->installed.stats.packages, apk_message("OK: %d packages, %d dirs, %d files, %zu MiB",
db->installed.stats.dirs, db->installed.stats.packages,
db->installed.stats.files); 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; return r;