The following commit has been merged in the master branch:
commit 69c9250259d3abb8feb632898e5a495e74a33fc8
Author: Guillem Jover <[email protected]>
Date: Thu Feb 26 07:35:17 2009 +0200
dpkg: Add progress reporting while reading the file list database
Reading the files database can take a while on machines with slow disks
and an empty cache. To make the wait more tolerable try to display a
progress indicator if the output is a terminal.
Based-on-patch-by: Romain Francoise <[email protected]>
diff --git a/ChangeLog b/ChangeLog
index 1c6b4dd..955fa43 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,15 @@
2009-02-26 Romain Francoise <[email protected]>,
Guillem Jover <[email protected]>
+ * src/filesdb.c: Include 'progress.h'.
+ (ensure_allinstfiles_available): Call progress_init instead of
+ directly printing. Call progress_step if needing to print on each
+ package iteration. And call progress_done if needing to print when
+ finished.
+
+2009-02-26 Romain Francoise <[email protected]>,
+ Guillem Jover <[email protected]>
+
* lib/Makefile.am (libdpkg_a_SOURCES): Add 'progress.h' and
'progress.c'.
* lib/progress.h: New file.
diff --git a/debian/changelog b/debian/changelog
index 09c6bb7..4d76100 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -60,6 +60,8 @@ dpkg (1.15.0) UNRELEASED; urgency=low
* Document in deb.5 in detail the currently supported format, ar member
names, types of tar archives and data.tar members.
* Print correct feature name on «dpkg --assert-*» failures.
+ * Add progress reporting to dpkg while reading the file list database.
+ Based on a patch by Romain Francoise.
[ Raphael Hertzog ]
* Enhance dpkg-shlibdeps's error message when a library can't be found to
diff --git a/src/filesdb.c b/src/filesdb.c
index e9a1a91..b68b2d2 100644
--- a/src/filesdb.c
+++ b/src/filesdb.c
@@ -40,6 +40,7 @@
#include <dpkg-db.h>
#include <dpkg-priv.h>
+#include "progress.h"
#include "filesdb.h"
#include "main.h"
@@ -214,19 +215,28 @@ void ensure_packagefiles_available(struct pkginfo *pkg) {
void ensure_allinstfiles_available(void) {
struct pkgiterator *it;
struct pkginfo *pkg;
-
+ struct progress progress;
+
if (allpackagesdone) return;
if (saidread<2) {
+ int max = countpackages();
+
saidread=1;
- printf(_("(Reading database ... "));
+ progress_init(&progress, _("(Reading database ... "), max);
}
+
it= iterpkgstart();
- while ((pkg = iterpkgnext(it)) != NULL)
+ while ((pkg = iterpkgnext(it)) != NULL) {
ensure_packagefiles_available(pkg);
+
+ if (saidread == 1)
+ progress_step(&progress);
+ }
iterpkgend(it);
allpackagesdone= 1;
if (saidread==1) {
+ progress_done(&progress);
printf(_("%d files and directories currently installed.)\n"),nfiles);
saidread=2;
}
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]