X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/6dcae298f972eb20223838f0e1dc376c44bc9cc3..cc0a4c82b3c132abba9b9ec35fd61bc8b45a1b80:/cmdline/apt-internal-solver.cc?ds=sidebyside diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index 12f4d6f93..aecb0eaba 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -63,10 +63,24 @@ static std::vector GetCommands() /*{{{*/ return {}; } /*}}}*/ +static bool WriteSolution(pkgDepCache &Cache, FileFd &output) /*{{{*/ +{ + bool Okay = output.Failed() == false; + for (pkgCache::PkgIterator Pkg = Cache.PkgBegin(); Pkg.end() == false && likely(Okay); ++Pkg) + { + std::string action; + if (Cache[Pkg].Delete() == true) + Okay &= EDSP::WriteSolutionStanza(output, "Remove", Pkg.CurrentVer()); + else if (Cache[Pkg].NewInstall() == true || Cache[Pkg].Upgrade() == true) + Okay &= EDSP::WriteSolutionStanza(output, "Install", Cache.GetCandidateVersion(Pkg)); + else if (Cache[Pkg].Garbage == true) + Okay &= EDSP::WriteSolutionStanza(output, "Autoremove", Pkg.CurrentVer()); + } + return Okay; +} + /*}}}*/ int main(int argc,const char *argv[]) /*{{{*/ { - InitLocale(); - // we really don't need anything DropPrivileges(); @@ -109,6 +123,7 @@ int main(int argc,const char *argv[]) /*{{{*/ _config->Set("APT::System", "Debian APT solver interface"); _config->Set("APT::Solver", "internal"); _config->Set("edsp::scenario", "/nonexistent/stdin"); + _config->Clear("Dir::Log"); FileFd output; if (output.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::BufferedWrite, true) == false) DIE("stdout couldn't be opened"); @@ -189,7 +204,7 @@ int main(int argc,const char *argv[]) /*{{{*/ EDSP::WriteProgress(95, "Write solution…", output); - if (EDSP::WriteSolution(CacheFile, output) == false) + if (WriteSolution(CacheFile, output) == false) DIE("Failed to output the solution!"); EDSP::WriteProgress(100, "Done", output);