Просмотр исходного кода

* apt-pkg/deb/dpkgpm.cc:
- improve the filtering for duplicated apport reports (thanks
to seb128 for pointing that problem out)

Michael Vogt лет назад: 18
Родитель
Сommit
d6a4afcb1b
2 измененных файлов с 19 добавлено и 1 удалено
  1. 16 1
      apt-pkg/deb/dpkgpm.cc
  2. 3 0
      debian/changelog

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

@@ -387,6 +387,14 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
 
 
    if(strncmp(action,"error",strlen("error")) == 0)
    if(strncmp(action,"error",strlen("error")) == 0)
    {
    {
+      // urgs, sometime has ":" in its error string so that we
+      // end up with the error message split between list[3]
+      // and list[4], e.g. the message: 
+      // failed in buffer_write(fd) (10, ret=-1): backend dpkg-deb ...
+      // concat them again
+      if( list[4] != NULL)
+	 list[4][-1] = ':';
+
       status << "pmerror:" << list[1]
       status << "pmerror:" << list[1]
 	     << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
 	     << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
 	     << ":" << list[3]
 	     << ":" << list[3]
@@ -954,13 +962,20 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
       return;
       return;
    }
    }
 
 
-   // only report the first error
+   // only report the first errors
    if(pkgFailures > _config->FindI("APT::Apport::MaxReports", 3))
    if(pkgFailures > _config->FindI("APT::Apport::MaxReports", 3))
    {
    {
       std::clog << _("No apport report written because MaxReports is reached already") << std::endl;
       std::clog << _("No apport report written because MaxReports is reached already") << std::endl;
       return;
       return;
    }
    }
 
 
+   // check if its not a follow up error 
+   const char *needle = dgettext("dpkg", "dependency problems - leaving unconfigured");
+   if(strstr(errormsg, needle) != NULL) {
+      std::clog << _("No apport report written because the error message indicates its a followup error from a previous failure.") << std::endl;
+      return;
+   }
+
    // get the pkgname and reportfile
    // get the pkgname and reportfile
    pkgname = flNotDir(pkgpath);
    pkgname = flNotDir(pkgpath);
    pos = pkgname.find('_');
    pos = pkgname.find('_');

+ 3 - 0
debian/changelog

@@ -8,6 +8,9 @@ apt (0.7.14ubuntu6) UNRELEASED; urgency=low
     - support having CDs with no Packages file (just a Packages.gz)
     - support having CDs with no Packages file (just a Packages.gz)
       by not forcing a verification on non-existing files
       by not forcing a verification on non-existing files
      (LP: #255545)
      (LP: #255545)
+  * apt-pkg/deb/dpkgpm.cc:
+    - improve the filtering for duplicated apport reports (thanks
+      to seb128 for pointing that problem out)
 
 
  -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 07 Aug 2008 16:28:05 +0200
  -- Michael Vogt <michael.vogt@ubuntu.com>  Thu, 07 Aug 2008 16:28:05 +0200