From 2d403b92011c6e4a317a48284e7c68952ce5ddcd Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 29 Jun 2009 18:20:58 +0200 Subject: add hook for auto-install (closes: #470035) --- apt-pkg/depcache.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'apt-pkg/depcache.cc') diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index e9ef9cedc..fcc6f4a4e 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -853,6 +853,17 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, // We dont even try to install virtual packages.. if (Pkg->VersionList == 0) return; + + /* if the user doesn't request directly the install we have to check + if this install will conflict with any rule a application + like apt-get or aptitude might has set (for the user) + e.g. forbidden versions, holds or other magic stuff */ + if(FromUser == false && !IsAutoInstallOk(Pkg, Depth)) + { + MarkKeep(Pkg, false, FromUser, Depth); + return; + } + /* Target the candidate version and remove the autoflag. We reset the autoflag below if this was called recursively. Otherwise the user should have the ability to de-auto a package by changing its state */ @@ -1059,6 +1070,15 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst, } } /*}}}*/ +// DepCache::IsAutoInstallOk - check if it is to install this package /*{{{*/ +// --------------------------------------------------------------------- +/* The default implementation is useless, but an application using this + library can override this method to control the MarkInstall behaviour */ +bool pkgDepCache::IsAutoInstallOk(const PkgIterator &Pkg, unsigned long Depth) +{ + return true; +} + /*}}}*/ // DepCache::SetReInstall - Set the reinstallation flag /*{{{*/ // --------------------------------------------------------------------- /* */ -- cgit v1.2.3