summaryrefslogtreecommitdiff
path: root/apt-pkg/edsp.cc
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 /apt-pkg/edsp.cc
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)
Diffstat (limited to 'apt-pkg/edsp.cc')
-rw-r--r--apt-pkg/edsp.cc20
1 files changed, 18 insertions, 2 deletions
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");