summaryrefslogtreecommitdiff
path: root/apt-pkg/depcache.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2006-08-11 11:30:11 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2006-08-11 11:30:11 +0200
commit4ef9a929f1cb74f08f764b321cbea62cbfe025a2 (patch)
treeaadc8b8f299a3e1fe86965bfecd2301e1f0eb3c5 /apt-pkg/depcache.cc
parent1b1c2224f5777956f345471b600ed56203c2d400 (diff)
* cmdline/apt-get.cc:
- added "--fix-policy" option to make it easy to fix any not-install recommends * apt-pkg/depcache.{cc,h} - MarkInstall() has a new "ForceImportantDeps" option (defaults to false) to fice the install of recommends even for already installed pkgs - a new PolicyBroken() function to see how much of the recommends are broken
Diffstat (limited to 'apt-pkg/depcache.cc')
-rw-r--r--apt-pkg/depcache.cc26
1 files changed, 16 insertions, 10 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 6296892ba..bfcb8e0eb 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -239,9 +239,11 @@ void pkgDepCache::AddStates(const PkgIterator &Pkg,int Add)
{
StateCache &State = PkgState[Pkg->ID];
- // The Package is broken
+ // The Package is broken (either minimal dep or policy dep)
if ((State.DepState & DepInstMin) != DepInstMin)
iBrokenCount += Add;
+ if ((State.DepState & DepInstPolicy) != DepInstPolicy)
+ iPolicyBrokenCount += Add;
// Bad state
if (Pkg.State() != PkgIterator::NeedsNothing)
@@ -596,7 +598,7 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg, bool rPurge)
// ---------------------------------------------------------------------
/* */
void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
- unsigned long Depth)
+ unsigned long Depth, bool ForceImportantDeps)
{
if (Depth > 100)
return;
@@ -664,24 +666,26 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
/* Check if this dep should be consider for install. If it is a user
defined important dep and we are installed a new package then
- it will be installed. Otherwise we only worry about critical deps */
+ it will be installed. Otherwise we only check for important
+ deps that have changed from the installed version
+ */
if (IsImportantDep(Start) == false)
continue;
-
+
/* check if any ImportantDep() (but not Critial) where added
- * since we installed the thing
+ * since we installed the package
*/
bool isNewImportantDep = false;
- if(IsImportantDep(Start) && !Start.IsCritical())
+ if(!ForceImportantDeps && !Start.IsCritical())
{
bool found=false;
VerIterator instVer = Pkg.CurrentVer();
- for (DepIterator D = instVer.DependsList(); !D.end(); D++)
+ for (DepIterator D = instVer.DependsList(); D.end() != true; D++)
{
//FIXME: deal better with or-groups(?)
DepIterator LocalStart = D;
- if(IsImportantDep(Dep) && Start.TargetPkg() == D.TargetPkg())
+ if(IsImportantDep(D) && Start.TargetPkg() == D.TargetPkg())
found=true;
}
// this is a new dep if it was not found to be already
@@ -693,7 +697,9 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
std::clog << "new important dependency: "
<< Start.TargetPkg().Name() << std::endl;
- if (Pkg->CurrentVer != 0 && Start.IsCritical() == false && !isNewImportantDep)
+ // skip important deps if the package is already installed
+ if (Pkg->CurrentVer != 0 && Start.IsCritical() == false
+ && !isNewImportantDep && !ForceImportantDeps)
continue;
/* If we are in an or group locate the first or that can
@@ -741,7 +747,7 @@ void pkgDepCache::MarkInstall(PkgIterator const &Pkg,bool AutoInst,
std::clog << "Installing " << InstPkg.Name()
<< " as dep of " << Pkg.Name()
<< std::endl;
- MarkInstall(InstPkg,true,Depth + 1);
+ MarkInstall(InstPkg,true,Depth + 1, ForceImportantDeps);
// Set the autoflag, after MarkInstall because MarkInstall unsets it
if (P->CurrentVer == 0)