Browse Source

* added a InRootSetFunc class for clients to add own packages to the mark'n'sweep root set

debian/1.8.y
Michael Vogt 17 years ago
parent
commit
331956f9b5
  1. 10
      apt-pkg/algorithms.cc
  2. 14
      apt-pkg/algorithms.h

10
apt-pkg/algorithms.cc

@ -1342,8 +1342,14 @@ pkgMarkAlwaysInclude(pkgCache::PkgIterator p, vector<regex_t*> alwaysMark)
return false;
}
bool pkgMarkUsed(pkgDepCache &Cache)
{
InRootSetFunc f;
return pkgMarkUsed(Cache, f);
}
// the main mark algorithm
bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func)
bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc &userFunc)
{
bool follow_recommends;
bool follow_suggests;
@ -1394,7 +1400,7 @@ bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc func)
// do the mark part, this is the core bit of the algorithm
for(pkgCache::PkgIterator p=Cache.PkgBegin(); !p.end(); ++p)
{
if( (func != NULL ? (*func)(p) : false) ||
if( userFunc.InRootSet(p) ||
pkgMarkAlwaysInclude(p, neverAutoRemoveRegexp) ||
!(Cache[p].Flags & pkgCache::Flag::Auto) ||
(p->Flags & pkgCache::Flag::Essential))

14
apt-pkg/algorithms.h

@ -134,10 +134,16 @@ bool pkgMinimizeUpgrade(pkgDepCache &Cache);
void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
// callback function that can be used by the client to bring in
// class that can be subclassed by the client to bring in
// certain own packages into the root set (if the client returns
// True the package will be considered as part of the root set)
typedef bool (*InRootSetFunc)(pkgCache::PkgIterator);
class InRootSetFunc
{
public:
virtual bool InRootSet(const pkgCache::PkgIterator &pkg) {return false;};
virtual ~InRootSetFunc() {};
};
// Mark all reachable packages with "pkgDepCache::StateCache.Marked=1"
// the root-set are all essential packages+everything that was not
@ -147,7 +153,7 @@ typedef bool (*InRootSetFunc)(pkgCache::PkgIterator);
// 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);
bool pkgMarkUsed(pkgDepCache &Cache);
bool pkgMarkUsed(pkgDepCache &Cache, InRootSetFunc &f);
#endif

Loading…
Cancel
Save