summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/algorithms.cc10
-rw-r--r--apt-pkg/algorithms.h18
2 files changed, 21 insertions, 7 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index c679e76f6..11f5b5671 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -1329,7 +1329,7 @@ void pkgMarkPackage(pkgDepCache &Cache,
}
-bool pkgMarkUsed(pkgDepCache &Cache)
+bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func)
{
bool follow_recommends;
bool follow_suggests;
@@ -1343,14 +1343,16 @@ bool pkgMarkUsed(pkgDepCache &Cache)
// init vars
follow_recommends=_config->FindB("APT::AutoRemove::RecommendsImportant",false);
- follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportend", false);
+ follow_suggests=_config->FindB("APT::AutoRemove::SuggestsImportant", false);
// do the mark part
for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p)
{
- if(!(Cache[p].Flags & pkgCache::Flag::Auto) ||
- (p->Flags & pkgCache::Flag::Essential))
+ if( (func != NULL ? (*func)(p) : false) ||
+ !(Cache[p].Flags & pkgCache::Flag::Auto) ||
+ (p->Flags & pkgCache::Flag::Essential))
+
{
if(Cache[p].Keep() && !p.CurrentVer().end())
pkgMarkPackage(Cache, p, p.CurrentVer(),
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index 210127ab9..82d7b7aad 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -133,8 +133,20 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache);
void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
-// mark all reachable packages, everything that is not reach can
-// be removed
-bool pkgMarkUsed(pkgDepCache &Cache);
+
+// callback function that can be used by the client to bring in
+// certain own packages into the root set
+typedef bool (*InRootSetFunc)(pkgCache::PkgIterator);
+
+// Mark all reachable packages with pkgDepCache::StateCache.Marked
+// the root-set are all essential packages+everything that was installed
+// manually
+//
+// If InRootSetFunc is set, it will be called for each PkgIterator. This
+// is usefull for clients that have there own idea about the root-set
+//
+// Everything that is not reach can be removed
+bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc f=NULL);
+
#endif