Просмотр исходного кода

* added a callback to pkgMarkUsed() so that frontend can extend the root-set of the auto-remover easily

Michael Vogt лет назад: 21
Родитель
Сommit
2ac6ce927c
2 измененных файлов с 21 добавлено и 7 удалено
  1. 6 4
      apt-pkg/algorithms.cc
  2. 15 3
      apt-pkg/algorithms.h

+ 6 - 4
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(),

+ 15 - 3
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