Procházet zdrojové kódy

Add DPkgPM::Progress for terminal install progress

Michael Vogt před 13 roky
rodič
revize
7546c8da99
2 změnil soubory, kde provedl 18 přidání a 1 odebrání
  1. 16 1
      apt-pkg/deb/dpkgpm.cc
  2. 2 0
      apt-pkg/deb/dpkgpm.h

+ 16 - 1
apt-pkg/deb/dpkgpm.cc

@@ -620,6 +620,9 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
 	     << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
 	     << ":" << s
 	     << endl;
+      if(_config->FindB("DPkgPM::Progress", false) == true)
+         SendTerminalProgress(PackagesDone/float(PackagesTotal)*100.0);
+
       if(OutStatusFd > 0)
 	 FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
       if (Debug == true)
@@ -860,6 +863,18 @@ bool pkgDPkgPM::CloseLog()
    return true;
 }
 									/*}}}*/
+// DPkgPM::SendTerminalProgress 					/*{{{*/
+// ---------------------------------------------------------------------
+/* Send progress info to the terminal
+ */
+void pkgDPkgPM::SendTerminalProgress(float percentage)
+{
+   // FIXME: use colors too
+   std::cout << "\r\n"
+             << "Progress: [" << percentage << "%]"
+             << "\r\n";
+}
+									/*}}}*/
 /*{{{*/
 // This implements a racy version of pselect for those architectures
 // that don't have a working implementation.
@@ -1274,7 +1289,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	 FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
       }
       Child = ExecFork();
-            
+      
       // This is the child
       if (Child == 0)
       {

+ 2 - 0
apt-pkg/deb/dpkgpm.h

@@ -84,6 +84,8 @@ class pkgDPkgPM : public pkgPackageManager
    bool SendPkgsInfo(FILE * const F, unsigned int const &Version);
    void WriteHistoryTag(std::string const &tag, std::string value);
 
+   void SendTerminalProgress(float percentage);
+
    // apport integration
    void WriteApportReport(const char *pkgpath, const char *errormsg);