diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-06-04 19:53:54 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-06-04 19:53:54 +0200 |
commit | 71608330b9b2bd95a0481ca53cd58b584fd61e42 (patch) | |
tree | 0faa250dcda0ff2f47f02e75b88b7f070d3c8daf /cmdline | |
parent | 307d9eb2d13ee59191b86ffec2f36ba3fffc5c20 (diff) |
edsp: use a stanza based interface for solution writing
EDSP had a WriteSolution method to write out the entire solution based
on the inspection of a given pkgDepCache, but that is rather inflexible
both for EDSP itself and for other EDSP like-protocols. It seems better
to use a smaller scope in printing just a single stanza based on a given
version as there is more reuse potential.
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/apt-internal-solver.cc | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/cmdline/apt-internal-solver.cc b/cmdline/apt-internal-solver.cc index 80f92152a..8296e8d01 100644 --- a/cmdline/apt-internal-solver.cc +++ b/cmdline/apt-internal-solver.cc @@ -63,6 +63,22 @@ static std::vector<aptDispatchWithHelp> 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[]) /*{{{*/ { // we really don't need anything @@ -187,7 +203,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); |