diff options
Diffstat (limited to 'apt-pkg')
-rw-r--r-- | apt-pkg/algorithms.cc | 9 | ||||
-rw-r--r-- | apt-pkg/edsp.cc | 14 | ||||
-rw-r--r-- | apt-pkg/upgrade.cc | 15 |
3 files changed, 27 insertions, 11 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index d202951a9..b173979c3 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -636,8 +636,9 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg) bool pkgProblemResolver::Resolve(bool BrokenFix, OpProgress * const Progress) { std::string const solver = _config->Find("APT::Solver", "internal"); + auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, 0, Progress); if (solver != "internal") - return EDSP::ResolveExternal(solver.c_str(), Cache, 0, Progress); + return ret; return ResolveInternal(BrokenFix); } /*}}}*/ @@ -1133,10 +1134,10 @@ bool pkgProblemResolver::InstOrNewPolicyBroken(pkgCache::PkgIterator I) bool pkgProblemResolver::ResolveByKeep(OpProgress * const Progress) { std::string const solver = _config->Find("APT::Solver", "internal"); + constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE; + auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress); if (solver != "internal") - return EDSP::ResolveExternal(solver.c_str(), Cache, - EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE, - Progress); + return ret; return ResolveByKeepInternal(); } /*}}}*/ diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc index 58d2769f9..fcff208c1 100644 --- a/apt-pkg/edsp.cc +++ b/apt-pkg/edsp.cc @@ -20,6 +20,7 @@ #include <apt-pkg/string_view.h> #include <apt-pkg/pkgsystem.h> +#include <sys/stat.h> #include <ctype.h> #include <stddef.h> #include <string.h> @@ -1007,6 +1008,19 @@ bool EDSP::ExecuteSolver(const char* const solver, int *solver_in, int *solver_o // EDSP::ResolveExternal - resolve problems by asking external for help {{{*/ bool EDSP::ResolveExternal(const char* const solver, pkgDepCache &Cache, unsigned int const flags, OpProgress *Progress) { + if (strcmp(solver, "internal") == 0) + { + auto const dumpfile = _config->FindFile("Dir::Log::Solver"); + if (dumpfile.empty()) + return false; + auto const dumpdir = flNotFile(dumpfile); + FileFd output; + if (CreateAPTDirectoryIfNeeded(dumpdir, dumpdir) == false || + output.Open(dumpfile, FileFd::WriteOnly | FileFd::Exclusive | FileFd::Create, FileFd::Extension, 0644) == false) + return _error->WarningE("EDSP::Resolve", _("Could not open file '%s'"), dumpfile.c_str()); + bool Okay = EDSP::WriteRequest(Cache, output, flags, nullptr); + return Okay && EDSP::WriteScenario(Cache, output, nullptr); + } int solver_in, solver_out; pid_t const solver_pid = EDSP::ExecuteSolver(solver, &solver_in, &solver_out, true); if (solver_pid == 0) diff --git a/apt-pkg/upgrade.cc b/apt-pkg/upgrade.cc index c3be9b64f..afc9ad613 100644 --- a/apt-pkg/upgrade.cc +++ b/apt-pkg/upgrade.cc @@ -27,8 +27,9 @@ static bool pkgDistUpgrade(pkgDepCache &Cache, OpProgress * const Progress) { std::string const solver = _config->Find("APT::Solver", "internal"); + auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, EDSP::Request::UPGRADE_ALL, Progress); if (solver != "internal") - return EDSP::ResolveExternal(solver.c_str(), Cache, EDSP::Request::UPGRADE_ALL, Progress); + return ret; if (Progress != NULL) Progress->OverallProgress(0, 100, 1, _("Calculating upgrade")); @@ -129,10 +130,10 @@ bool pkgDistUpgrade(pkgDepCache &Cache) static bool pkgAllUpgradeNoNewPackages(pkgDepCache &Cache, OpProgress * const Progress) { std::string const solver = _config->Find("APT::Solver", "internal"); + constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE; + auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress); if (solver != "internal") - return EDSP::ResolveExternal(solver.c_str(), Cache, - EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_NEW_INSTALL | EDSP::Request::FORBID_REMOVE, - Progress); + return ret; if (Progress != NULL) Progress->OverallProgress(0, 100, 1, _("Calculating upgrade")); @@ -173,10 +174,10 @@ static bool pkgAllUpgradeNoNewPackages(pkgDepCache &Cache, OpProgress * const Pr static bool pkgAllUpgradeWithNewPackages(pkgDepCache &Cache, OpProgress * const Progress) { std::string const solver = _config->Find("APT::Solver", "internal"); + constexpr auto flags = EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_REMOVE; + auto const ret = EDSP::ResolveExternal(solver.c_str(), Cache, flags, Progress); if (solver != "internal") - return EDSP::ResolveExternal(solver.c_str(), Cache, - EDSP::Request::UPGRADE_ALL | EDSP::Request::FORBID_REMOVE, - Progress); + return ret; if (Progress != NULL) Progress->OverallProgress(0, 100, 1, _("Calculating upgrade")); |