diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2006-08-11 11:30:11 +0200 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2006-08-11 11:30:11 +0200 |
commit | 4ef9a929f1cb74f08f764b321cbea62cbfe025a2 (patch) | |
tree | aadc8b8f299a3e1fe86965bfecd2301e1f0eb3c5 /apt-pkg/depcache.cc | |
parent | 1b1c2224f5777956f345471b600ed56203c2d400 (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.cc | 26 |
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) |