summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/algorithms.cc2
-rw-r--r--apt-pkg/depcache.cc3
-rw-r--r--apt-pkg/edsp.cc20
3 files changed, 23 insertions, 2 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index 82b1d608d..fea9e92e1 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -756,6 +756,8 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
if (EDSP::ReadResponse(solver_out, Cache) == false)
return _error->Error("Reading solver response failed");
+
+ return true;
}
return ResolveInternal(BrokenFix);
}
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index ed9e2084c..31410e2a6 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -1609,6 +1609,9 @@ bool pkgDepCache::MarkFollowsSuggests()
// pkgDepCache::MarkRequired - the main mark algorithm /*{{{*/
bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
{
+ if (_config->Find("APT::Solver::Name", "internal") != "internal")
+ return true;
+
bool follow_recommends;
bool follow_suggests;
bool debug_autoremove = _config->FindB("Debug::pkgAutoRemove",false);
diff --git a/apt-pkg/edsp.cc b/apt-pkg/edsp.cc
index c3e608d17..f35570c12 100644
--- a/apt-pkg/edsp.cc
+++ b/apt-pkg/edsp.cc
@@ -227,9 +227,12 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache) {
would be too easy for a (buggy) solver to segfault APT… */
unsigned long long const VersionCount = Cache.Head().VersionCount;
unsigned long VerIdx[VersionCount];
- for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P)
+ for (pkgCache::PkgIterator P = Cache.PkgBegin(); P.end() == false; ++P) {
for (pkgCache::VerIterator V = P.VersionList(); V.end() == false; ++V)
VerIdx[V->ID] = V.Index();
+ Cache[P].Marked = true;
+ Cache[P].Garbage = false;
+ }
FileFd in;
in.OpenDescriptor(input, FileFd::ReadOnly);
@@ -252,7 +255,9 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache) {
else
std::clog << msg << std::endl;
continue;
- } else
+ } else if (section.Exists("Autoremove") == true)
+ type = "Autoremove";
+ else
continue;
size_t const id = section.FindULL(type.c_str(), VersionCount);
@@ -270,6 +275,10 @@ bool EDSP::ReadResponse(int const input, pkgDepCache &Cache) {
Cache.MarkInstall(Ver.ParentPkg(), false, false);
else if (type == "Remove")
Cache.MarkDelete(Ver.ParentPkg(), false);
+ else if (type == "Autoremove") {
+ Cache[Ver.ParentPkg()].Marked = false;
+ Cache[Ver.ParentPkg()].Garbage = true;
+ }
}
return true;
}
@@ -423,6 +432,13 @@ bool EDSP::WriteSolution(pkgDepCache &Cache, FILE* output)
if (Debug == true)
fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Cache.GetCandidateVer(Pkg).VerStr());
}
+ else if (Cache[Pkg].Garbage == true)
+ {
+ fprintf(output, "Autoremove: %d\n", Pkg.CurrentVer()->ID);
+ if (Debug == true)
+ fprintf(output, "Package: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ fprintf(stderr, "Autoremove: %s\nVersion: %s\n", Pkg.FullName().c_str(), Pkg.CurrentVer().VerStr());
+ }
else
continue;
fprintf(output, "\n");