]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/algorithms.cc
refactor: move solver execution into his own EDSP method
[apt.git] / apt-pkg / algorithms.cc
index b55ff2897ad9df37c42f06bd21456228fa6c4985..82b1d608dccff159e04473f962168ec68ae8381b 100644 (file)
@@ -20,7 +20,7 @@
 #include <apt-pkg/version.h>
 #include <apt-pkg/sptr.h>
 #include <apt-pkg/acquire-item.h>
-#include <apt-pkg/edspwriter.h>
+#include <apt-pkg/edsp.h>
 
 #include <apti18n.h>
 #include <sys/types.h>
@@ -740,20 +740,22 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
 bool pkgProblemResolver::Resolve(bool BrokenFix)
 {
    std::string const solver = _config->Find("APT::Solver::Name", "internal");
+
    if (solver != "internal")
    {
-      FILE* output = fopen("/tmp/scenario.log", "w");
-      edspWriter::WriteScenario(Cache, output);
-      fclose(output);
-      output = fopen("/tmp/request.log", "w");
-      edspWriter::WriteRequest(Cache, output);
-      fclose(output);
-      if (ResolveInternal(BrokenFix) == false)
+      int solver_in, solver_out;
+      if (EDSP::ExecuteSolver(solver.c_str(), &solver_in, &solver_out) == false)
         return false;
-      output = fopen("/tmp/solution.log", "w");
-      edspWriter::WriteSolution(Cache, output);
+
+      FILE* output = fdopen(solver_in, "w");
+      if (output == NULL)
+         return _error->Errno("Resolve", "fdopen on solver stdin failed");
+      EDSP::WriteRequest(Cache, output);
+      EDSP::WriteScenario(Cache, output);
       fclose(output);
-      return true;
+
+      if (EDSP::ReadResponse(solver_out, Cache) == false)
+        return _error->Error("Reading solver response failed");
    }
    return ResolveInternal(BrokenFix);
 }