- add repackage progress callbacks
authorpmatilai <pmatilai>
Fri, 26 May 2006 15:58:30 +0000 (15:58 +0000)
committerpmatilai <pmatilai>
Fri, 26 May 2006 15:58:30 +0000 (15:58 +0000)
- report full progress, erasures included
- still NeedsWork (tm)

apt-pkg/rpm/rpmpm.cc
apt-pkg/rpm/rpmshowprogress.cc
apt-pkg/rpm/rpmshowprogress.h

index 5df695b..ffdcd70 100644 (file)
@@ -808,9 +808,9 @@ bool pkgRPMLibPM::Process(vector<const char*> &install,
 
    if (_config->FindI("quiet",0) >= 1)
        notifyFlags |= INSTALL_LABEL;
-   else if (Interactive == true)
+   else if (Interactive == true) 
        notifyFlags |= INSTALL_LABEL | INSTALL_HASH;
-   else
+   else 
        notifyFlags |= INSTALL_LABEL | INSTALL_PERCENT;
 
    if (uninstall.empty() == false)
@@ -820,8 +820,10 @@ bool pkgRPMLibPM::Process(vector<const char*> &install,
    if (upgrade.empty() == false)
        AddToTransaction(Item::RPMUpgrade, upgrade);
 
-   // Setup the gauge used by rpmShowProgress.
-   packagesTotal = install.size()+upgrade.size();
+   // FIXME: This ain't right because most things show up in upgrade 
+   // even if they're really just installs, and repackaging isn't taken
+   // into account either.
+   packagesTotal = install.size() + upgrade.size() * 2 + uninstall.size();
 
 #if RPM_VERSION >= 0x040100
    if (_config->FindB("RPM::NoDeps", false) == false) {
index 4d0257b..b7afafa 100644 (file)
@@ -4,42 +4,45 @@
 #include <apti18n.h>
 
 #include "rpmshowprogress.h"
-//
-// This code was originally from rpm 4.0.3.
-//
+
+int packagesTotal;
+
 static void printHash(const unsigned long amount, const unsigned long total)
 {
     int hashesNeeded;
-    int hashesTotal = 50;
 
-    if (isatty (STDOUT_FILENO))
-       hashesTotal = 44;
+    hashesTotal = (isatty (STDOUT_FILENO) ? 44 : 50);
 
-    if (hashesPrinted != hashesTotal) {
-       hashesNeeded = (int)(hashesTotal*(total?(((float)amount)/total):1));
-       while (hashesNeeded > hashesPrinted) {
+    if (hashesCurrent != hashesTotal) {
+       float pct = (total ? (((float) amount) / total) : 1.0);
+       hashesNeeded = (hashesTotal * pct) + 0.5;
+       while (hashesNeeded > hashesCurrent) {
            if (isatty (STDOUT_FILENO)) {
                int i;
-               for (i = 0; i < hashesPrinted; i++) (void) putchar ('#');
-               for (; i < hashesTotal; i++) (void) putchar (' ');
-               fprintf(stdout, "(%3d%%)",
-                       (int)(100 * (total ? (((float) amount) / total) : 1)));
-               for (i = 0; i < (hashesTotal + 6); i++) (void) putchar ('\b');
+               for (i = 0; i < hashesCurrent; i++)
+                   (void) putchar ('#');
+               for (; i < hashesTotal; i++)
+                   (void) putchar (' ');
+               fprintf(stdout, "(%3d%%)", (int)((100 * pct) + 0.5));
+               for (i = 0; i < (hashesTotal + 6); i++)
+                   (void) putchar ('\b');
            } else
                fprintf(stdout, "#");
 
-           hashesPrinted++;
+           hashesCurrent++;
        }
        (void) fflush(stdout);
-       hashesPrinted = hashesNeeded;
 
-       if (hashesPrinted == hashesTotal) {
+       if (hashesCurrent == hashesTotal) {
            int i;
            progressCurrent++;
            if (isatty(STDOUT_FILENO)) {
-               for (i = 1; i < hashesPrinted; i++) (void) putchar ('#');
-               fprintf(stdout, " [%3d%%]", (int)(100 * (progressTotal ?
-                       (((float) progressCurrent) / progressTotal) : 1)));
+               for (i = 1; i < hashesCurrent; i++)
+                   (void) putchar ('#');
+               pct = (progressTotal
+                   ? (((float) progressCurrent) / progressTotal)
+                   : 1);
+               fprintf(stdout, " [%3d%%]", (int)((100 * pct) + 0.5));
            }
            fprintf(stdout, "\n");
        }
@@ -87,7 +90,7 @@ void * rpmpmShowProgress(const void * arg,
        break;
 
     case RPMCALLBACK_INST_START:
-       hashesPrinted = 0;
+       hashesCurrent = 0;
        if (h == NULL || !(flags & INSTALL_LABEL))
            break;
 
@@ -130,7 +133,7 @@ void * rpmpmShowProgress(const void * arg,
 
     case RPMCALLBACK_TRANS_START:
        state = what;
-       hashesPrinted = 0;
+       hashesCurrent = 0;
        progressTotal = 1;
        progressCurrent = 0;
        if (!(flags & INSTALL_LABEL))
@@ -149,10 +152,44 @@ void * rpmpmShowProgress(const void * arg,
        progressCurrent = 0;
        break;
 
+    case RPMCALLBACK_REPACKAGE_START:
+        hashesCurrent = 0;
+        progressTotal = total;
+        progressCurrent = 0;
+        if (!(flags & INSTALL_LABEL))
+            break;
+        if (flags & INSTALL_HASH)
+            fprintf(stdout, "%-28s\n", _("Repackaging..."));
+        else
+            fprintf(stdout, "%s\n", _("Repackaging..."));
+        (void) fflush(stdout);
+        break;
+
+    case RPMCALLBACK_REPACKAGE_PROGRESS:
+        if (amount && (flags & INSTALL_HASH))
+            printHash(1, 1);    /* Fixes "preparing..." progress bar */
+        break;
+
+    case RPMCALLBACK_REPACKAGE_STOP:
+        progressTotal = total;
+        progressCurrent = total;
+        if (flags & INSTALL_HASH)
+            printHash(1, 1);    /* Fixes "preparing..." progress bar */
+        progressTotal = packagesTotal;
+        progressCurrent = 0;
+        if (!(flags & INSTALL_LABEL))
+            break;
+        if (flags & INSTALL_HASH)
+            fprintf(stdout, "%-28s\n", _("Upgrading..."));
+        else
+            fprintf(stdout, "%s\n", _("Upgrading..."));
+        (void) fflush(stdout);
+        break;
+
     case RPMCALLBACK_UNINST_PROGRESS:
        break;
     case RPMCALLBACK_UNINST_START:
-       hashesPrinted = 0;
+       hashesCurrent = 0;
        if (!(flags & INSTALL_LABEL))
            break;
        if (state != what) {
@@ -168,17 +205,15 @@ void * rpmpmShowProgress(const void * arg,
        s = headerSprintf(h, "%{NAME}.%{ARCH}", rpmTagTable, rpmHeaderFormats, NULL);
        if (flags & INSTALL_HASH) {
            fprintf(stdout, "%4d:%-23.23s", progressCurrent + 1, s);
+           printHash(1, 1);
        } else {
            fprintf(stdout, "%-28.28s", s);
        }
-       printHash(1, 1);
        fflush(stdout);
        s = NULL;
        break;
     }
  
-    // TODO: add repackage callbacks
-
     return rc;
 }      
 
index 6ea5eee..14d097b 100644 (file)
@@ -1,8 +1,9 @@
 
-static int hashesPrinted = 0;
-static int packagesTotal = 0;
+static int hashesTotal = 0;
+static int hashesCurrent = 0;
 static int progressTotal = 0;
 static int progressCurrent = 0;
+extern int packagesTotal;
 
 static void printHash(const unsigned long amount, const unsigned long total);