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);
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);
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;
}
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");