summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2011-12-27 14:06:03 +0200
committerTimo Teräs <timo.teras@iki.fi>2011-12-27 14:06:03 +0200
commit34756e6b87e7c8c055a6e050cad90e0b0a549357 (patch)
tree55fbdd7fbc5c44b0394573415341b966a7914b1c
parent83b098d357fa8508834d65bf2fbfee6c288cbd20 (diff)
downloadapk-tools-34756e6b87e7c8c055a6e050cad90e0b0a549357.tar.gz
apk-tools-34756e6b87e7c8c055a6e050cad90e0b0a549357.tar.bz2
apk-tools-34756e6b87e7c8c055a6e050cad90e0b0a549357.tar.xz
apk-tools-34756e6b87e7c8c055a6e050cad90e0b0a549357.zip
solver: report number of (mega)bytes used
-rw-r--r--src/apk_database.h1
-rw-r--r--src/database.c26
-rw-r--r--src/package.c7
-rw-r--r--src/solver.c15
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;