]> git.saurik.com Git - apt.git/commitdiff
reshuffle dpkgpm.cc code a bit more
authorMichael Vogt <mvo@debian.org>
Fri, 18 Oct 2013 06:32:36 +0000 (08:32 +0200)
committerMichael Vogt <mvo@debian.org>
Fri, 18 Oct 2013 06:32:36 +0000 (08:32 +0200)
apt-pkg/deb/dpkgpm.cc
test/integration/test-apt-progress-fd-error

index c5d40c0338e4e5dd36cdfba6cc7c7ade37fc4406..41885e6e8f8233c77ca6a8ea4c1972ebb9b87e71 100644 (file)
@@ -555,6 +555,8 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
       return;
    }
 
       return;
    }
 
+   // build the (prefix, pkgname, action) tuple, position of this
+   // is different for "processing" or "status" messages
    std::string prefix = APT::String::Strip(list[0]);
    std::string pkgname;
    std::string action_str;
    std::string prefix = APT::String::Strip(list[0]);
    std::string pkgname;
    std::string action_str;
@@ -573,6 +575,38 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
       return;
    }
 
       return;
    }
 
+   // FIXME: fix indent once the progress-refactor branch is merged
+   if (prefix == "status")
+   {
+
+   if(action_str == "error")
+   {
+      status << "pmerror:" << list[1]
+            << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
+            << ":" << list[3]
+            << endl;
+      if(OutStatusFd > 0)
+        FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
+      if (Debug == true)
+        std::clog << "send: '" << status.str() << "'" << endl;
+      pkgFailures++;
+      WriteApportReport(list[1].c_str(), list[3].c_str());
+      return;
+   }
+   else if(action_str == "conffile")
+   {
+      status << "pmconffile:" << list[1]
+            << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
+            << ":" << list[3]
+            << endl;
+      if(OutStatusFd > 0)
+        FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
+      if (Debug == true)
+        std::clog << "send: '" << status.str() << "'" << endl;
+      return;
+   }
+   }
+
    // dpkg does not send always send "pkgname:arch" so we add it here if needed
    if (pkgname.find(":") == std::string::npos)
    {
    // dpkg does not send always send "pkgname:arch" so we add it here if needed
    if (pkgname.find(":") == std::string::npos)
    {
@@ -595,6 +629,12 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
    const char* const pkg = pkgname.c_str();
    const char* action = action_str.c_str();
    std::string short_pkgname = StringSplit(pkgname, ":")[0];
    const char* const pkg = pkgname.c_str();
    const char* action = action_str.c_str();
    std::string short_pkgname = StringSplit(pkgname, ":")[0];
+   std::string arch = "";
+   if (pkgname.find(":") != string::npos)
+      arch = StringSplit(pkgname, ":")[1];
+   std::string i18n_pkgname = pkgname;
+   if (arch.size() != 0)
+      strprintf(i18n_pkgname, "%s (%s)", short_pkgname.c_str(), arch.c_str());
 
    // 'processing' from dpkg looks like
    // 'processing: action: pkg'
 
    // 'processing' from dpkg looks like
    // 'processing: action: pkg'
@@ -629,37 +669,9 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
       return;
    } 
 
       return;
    } 
 
-   // FIXME: fix indent once the progress-refactor branch is merged
    if (prefix == "status")
    {
 
    if (prefix == "status")
    {
 
-   if(strncmp(action,"error",strlen("error")) == 0)
-   {
-      status << "pmerror:" << list[1]
-            << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
-            << ":" << list[3]
-            << endl;
-      if(OutStatusFd > 0)
-        FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
-      if (Debug == true)
-        std::clog << "send: '" << status.str() << "'" << endl;
-      pkgFailures++;
-      WriteApportReport(list[1].c_str(), list[3].c_str());
-      return;
-   }
-   else if(strncmp(action,"conffile",strlen("conffile")) == 0)
-   {
-      status << "pmconffile:" << list[1]
-            << ":"  << (PackagesDone/float(PackagesTotal)*100.0) 
-            << ":" << list[3]
-            << endl;
-      if(OutStatusFd > 0)
-        FileFd::Write(OutStatusFd, status.str().c_str(), status.str().size());
-      if (Debug == true)
-        std::clog << "send: '" << status.str() << "'" << endl;
-      return;
-   }
-
    vector<struct DpkgState> const &states = PackageOps[pkg];
    const char *next_action = NULL;
    if(PackageOpsDone[pkg] < states.size())
    vector<struct DpkgState> const &states = PackageOps[pkg];
    const char *next_action = NULL;
    if(PackageOpsDone[pkg] < states.size())
index 0cd59410eda737ae3fe35a2653daefae332f339e..96d66371aa5e1f754516a295de4572461c75809d 100755 (executable)
@@ -18,5 +18,5 @@ setupaptarchive
 exec 3> apt-progress.log
 testfailure aptget install foo1 foo2 -y -o APT::Status-Fd=3
 msgtest "Ensure correct error message"
 exec 3> apt-progress.log
 testfailure aptget install foo1 foo2 -y -o APT::Status-Fd=3
 msgtest "Ensure correct error message"
-grep -q "aptarchive/pool/foo2_0.8.15_amd64.deb :40:trying to overwrite '/usr/bin/file-conflict', which is also in package foo1 0.8.15" apt-progress.log && msgpass || msgfail
+grep -q "aptarchive/pool/foo2_0.8.15_amd64.deb :40:trying to overwrite '/usr/bin/file-conflict', which is also in package foo1 0.8.15" apt-progress.log && msgpass || (cat apt-progress.log && msgfail)