Browse Source

* merged with apt--main

Patches applied:

 * apt@packages.debian.org/apt--main--0--patch-109
   Merge michael.vogt@ubuntu.com--2005/apt--progress-reporting--0

 * apt@packages.debian.org/apt--main--0--patch-110
   Merge michael.vogt@ubuntu.com--2005/apt--progress-reporting--0

 * michael.vogt@ubuntu.com--2005/apt--progress-reporting--0--patch-29
   * changelog finalized

 * michael.vogt@ubuntu.com--2005/apt--progress-reporting--0--patch-30
   * propper (and sane) support for pmerror and pmconffile added
Michael Vogt 21 years ago
parent
commit
64995601ae
5 changed files with 65 additions and 19 deletions
  1. 13 0
      README.progress-reporting
  2. 42 18
      apt-pkg/deb/dpkgpm.cc
  3. 1 1
      configure.in
  4. 1 0
      debian/apt-doc.docs
  5. 8 0
      debian/changelog

+ 13 - 0
README.progress-reporting

@@ -34,6 +34,19 @@ pmstatus:3dchess:60:Preparing to configure 3dchess
 pmstatus:3dchess:80:Configuring 3dchess
 pmstatus:3dchess:100:Installed 3dchess
 
+pmerror
+-------
+pmerror:deb:TotalPercentage:error string
+
+Example:
+pmerror: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : 75% : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data 
+
+
+pmconffile
+----------
+pmconffile:conffile:percent:'current-conffile' 'new-conffile' useredited distedited
+
+
 
 dlstatus
 --------

+ 42 - 18
apt-pkg/deb/dpkgpm.cc

@@ -612,20 +612,49 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	 if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
 	    std::clog << "got from dpkg '" << line << "'" << std::endl;
 
-	 // pass "error" and "conffile-prompt" messages from dpkg verbatim
-	 if((strncmp(line,"error",strlen("error")) == 0) ||
-	    (strncmp(line,"conffile-prompt",strlen("conffile-prompt")) == 0))
-	 {
-	       write(OutStatusFd, line, strlen(line));
-	       line[0]=0;
-	       continue;
-	 }
-	 // line contains the dpkg status info now. it has the form:
-	 // 'status:   <pkg>:  <pkg  qstate>' (see dpkg(1) for details)
-	 char* list[5];
+	 // the status we output
+	 ostringstream status;
+
+	 /* dpkg sends strings like this:
+	    'status:   <pkg>:  <pkg  qstate>'
+	    errors look like this:
+	    'status: /var/cache/apt/archives/krecipes_0.8.1-0ubuntu1_i386.deb : error : trying to overwrite `/usr/share/doc/kde/HTML/en/krecipes/krectip.png', which is also in package krecipes-data 
+	    and conffile-prompt like this
+	    'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
+	    
+	 */
+	 char* list[4];
 	 TokSplitString(':', line, list, 5);
 	 char *pkg = list[1];
-	 char *action = list[2];
+	 char *action = _strstrip(list[2]);
+
+	 if(strncmp(action,"error",strlen("error")) == 0)
+	 {
+	    status << "pmerror:" << list[1]
+		   << ":"  << (Done/float(Total)*100.0) 
+		   << ":" << list[3]
+		   << endl;
+	    if(OutStatusFd > 0)
+	       write(OutStatusFd, status.str().c_str(), status.str().size());
+	    line[0]=0;
+	    if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
+	       std::clog << "send: '" << status.str() << "'" << endl;
+	    continue;
+	 }
+	 if(strncmp(action,"conffile",strlen("conffile")) == 0)
+	 {
+	    status << "pmconffile:" << list[1]
+		   << ":"  << (Done/float(Total)*100.0) 
+		   << ":" << list[3]
+		   << endl;
+	    if(OutStatusFd > 0)
+	       write(OutStatusFd, status.str().c_str(), status.str().size());
+	    line[0]=0;
+	    if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
+	       std::clog << "send: '" << status.str() << "'" << endl;
+	    continue;
+	 }
+
 	 vector<struct DpkgState> &states = PackageOps[pkg];
 	 const char *next_action = NULL;
 	 if(PackageOpsDone[pkg] < states.size())
@@ -642,7 +671,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    // we moved from one dpkg state to a new one, report that
 	    PackageOpsDone[pkg]++;
 	    Done++;
-	    ostringstream status;
 	    // build the status str
 	    status << "pmstatus:" << pkg 
 		   << ":"  << (Done/float(Total)*100.0) 
@@ -651,11 +679,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
 	    if(OutStatusFd > 0)
 	       write(OutStatusFd, status.str().c_str(), status.str().size());
 	    if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
-	    {
-	       std::clog << "send to fd: '" << status.str() 
-			 << "'" << std::endl;
-	       
-	    }
+	       std::clog << "send: '" << status.str() << "'" << endl;
 
 	 }
 	 if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true) 

+ 1 - 1
configure.in

@@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib)
 AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
 
 dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.40")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.40.2")
 PACKAGE="apt"
 AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
 AC_SUBST(PACKAGE)

+ 1 - 0
debian/apt-doc.docs

@@ -0,0 +1 @@
+README.progress-reporting

+ 8 - 0
debian/changelog

@@ -1,3 +1,11 @@
+apt (0.6.40.2) unstable; urgency=low
+
+  * improved the support for "error" and "conffile" reporting from
+    dpkg, added the format to README.progress-reporting
+  * added README.progress-reporting to the apt-doc package
+
+ --
+
 apt (0.6.40.1ubuntu1) breezy; urgency=low
 
   * Synchronize with Debian