]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/edsp.cc
do not restore selections for already purged packages
[apt.git] / apt-pkg / edsp.cc
index 740eb0a0d6fcd50ef4ee8e20c3dadc4d36640e7d..f56625feb5e9044e04ac5a07fd41bf38d5798731 100644 (file)
@@ -1061,20 +1061,21 @@ bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
                return _error->Errno("ResolveExternal", "Opening solver %s stdin on fd %d for writing failed", solver, solver_in);
 
        bool Okay = output.Failed() == false;
-       if (Progress != NULL)
+       if (Okay && Progress != NULL)
                Progress->OverallProgress(0, 100, 5, _("Execute external solver"));
        Okay &= EDSP::WriteRequest(Cache, output, flags, Progress);
-       if (Progress != NULL)
+       if (Okay && Progress != NULL)
                Progress->OverallProgress(5, 100, 20, _("Execute external solver"));
        Okay &= EDSP::WriteScenario(Cache, output, Progress);
        output.Close();
 
-       if (Progress != NULL)
+       if (Okay && Progress != NULL)
                Progress->OverallProgress(25, 100, 75, _("Execute external solver"));
        if (Okay && EDSP::ReadResponse(solver_out, Cache, Progress) == false)
                return false;
 
-       return ExecWait(solver_pid, solver);
+       bool const waited = ExecWait(solver_pid, solver);
+       return Okay && waited;
 }
 bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache,
                         bool const upgrade, bool const distUpgrade,
@@ -1118,28 +1119,32 @@ bool EIPP::OrderInstall(char const * const solver, pkgPackageManager * const PM,
       return _error->Errno("EIPP::OrderInstall", "Opening planner %s stdin on fd %d for writing failed", solver, solver_in);
 
    bool Okay = output.Failed() == false;
-   if (Progress != NULL)
+   if (Okay && Progress != NULL)
       Progress->OverallProgress(0, 100, 5, _("Execute external planner"));
    Okay &= EIPP::WriteRequest(PM->Cache, output, flags, Progress);
-   if (Progress != NULL)
+   if (Okay && Progress != NULL)
       Progress->OverallProgress(5, 100, 20, _("Execute external planner"));
    Okay &= EIPP::WriteScenario(PM->Cache, output, Progress);
    output.Close();
 
-   if (Progress != NULL)
-      Progress->OverallProgress(25, 100, 75, _("Execute external planner"));
-
-   // we don't tell the external planners about boring things
-   for (auto Pkg = PM->Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+   if (Okay)
    {
-      if (Pkg->CurrentState == pkgCache::State::ConfigFiles && PM->Cache[Pkg].Purge() == true)
-        PM->Remove(Pkg, true);
+      if (Progress != nullptr)
+        Progress->OverallProgress(25, 100, 75, _("Execute external planner"));
+
+      // we don't tell the external planners about boring things
+      for (auto Pkg = PM->Cache.PkgBegin(); Pkg.end() == false; ++Pkg)
+      {
+        if (Pkg->CurrentState == pkgCache::State::ConfigFiles && PM->Cache[Pkg].Purge() == true)
+           PM->Remove(Pkg, true);
+      }
    }
 
-   if (Okay && EIPP::ReadResponse(solver_out, PM, Progress) == false)
+   if (EIPP::ReadResponse(solver_out, PM, Progress) == false)
       return false;
 
-   return ExecWait(solver_pid, solver);
+   bool const waited = ExecWait(solver_pid, solver);
+   return Okay && waited;
 }
                                                                        /*}}}*/
 bool EIPP::WriteRequest(pkgDepCache &Cache, FileFd &output,            /*{{{*/