summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-05-02 17:06:47 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-05-02 17:06:47 +0200
commit76d4aab06d3c5edd60362fd14b38eb43416616f0 (patch)
tree2dd6aac543370b30787033fa3838bf88ebeb262b
parentac5fbff8c55db2bd1cde194600115a874d9d0c73 (diff)
doesn't execute autoremove marker setting if an external solver is called
and instead rely on the Autoremove tagging to show us what could be done. (apt-internal-solver doesn't support this currently as it doesn't load the auto-information into the cache)
-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");