summaryrefslogtreecommitdiff
path: root/apt-pkg/depcache.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2009-06-30 13:52:52 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2009-06-30 13:52:52 +0200
commitd116d66834b77cc77750c89969c43e0ba9d5807e (patch)
tree68dbbe92d59466adc586932b27b3cf7f04d053d8 /apt-pkg/depcache.cc
parentd6ebeb21ddb3d8f3d485562cdac0e0878d50c936 (diff)
merge the AutoInstOk patch from debian-experimental
Diffstat (limited to 'apt-pkg/depcache.cc')
-rw-r--r--apt-pkg/depcache.cc35
1 files changed, 16 insertions, 19 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 8af6941cf..b1b8f970f 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -846,17 +846,6 @@ 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 */
@@ -1015,7 +1004,8 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
}
}
- if (InstPkg.end() == false)
+ if (InstPkg.end() == false &&
+ AutoInstOk(InstPkg, (*this)[InstPkg].CandidateVerIter(*this), Start))
{
if(DebugAutoInstall == true)
std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name()
@@ -1053,21 +1043,28 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
PkgIterator Pkg = Ver.ParentPkg();
if (Start->Type != Dep::DpkgBreaks)
- MarkDelete(Pkg,false,Depth + 1);
+ {
+ if(AutoInstOk(Pkg, VerIterator(*this), Start))
+ MarkDelete(Pkg);
+ }
else
- if (PkgState[Pkg->ID].CandidateVer != *I)
+ if (PkgState[Pkg->ID].CandidateVer != *I &&
+ AutoInstOk(Pkg, VerIterator(*this, PkgState[Pkg->ID].CandidateVer), Start))
MarkInstall(Pkg,true,Depth + 1, false, ForceImportantDeps);
}
continue;
}
}
}
- /*}}}*/
-// DepCache::IsAutoInstallOk - check if it is to install this package /*{{{*/
+
+// DepCache::AutoInstOk - 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)
+/* The default implementation just honors dpkg hold
+ But an application using this library can override this method
+ to control the MarkInstall behaviour */
+bool pkgDepCache::AutoInstOk(const PkgIterator &Pkg,
+ const VerIterator &v,
+ const DepIterator &d)
{
return (Pkg->SelectedState != pkgCache::State::Hold);
}