summaryrefslogtreecommitdiff
path: root/cmdline
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-06-04 19:53:54 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-06-04 19:53:54 +0200
commit71608330b9b2bd95a0481ca53cd58b584fd61e42 (patch)
tree0faa250dcda0ff2f47f02e75b88b7f070d3c8daf /cmdline
parent307d9eb2d13ee59191b86ffec2f36ba3fffc5c20 (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.cc18
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);