X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/c217f42adc1a82c7400e85178f61bf429fea1bc4..e5a1f2ff4cd1300364c7c644958583a8af704173:/apt-pkg/depcache.cc?ds=sidebyside diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc index 90c07658b..727f01462 100644 --- a/apt-pkg/depcache.cc +++ b/apt-pkg/depcache.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: depcache.cc,v 1.6 1998/11/23 01:45:58 jgg Exp $ +// $Id: depcache.cc,v 1.15 1999/03/26 07:38:43 jgg Exp $ /* ###################################################################### Dependency Cache - Caches Dependency information. @@ -25,6 +25,12 @@ pkgDepCache::pkgDepCache(MMap &Map,OpProgress &Prog) : { if (_error->PendingError() == false) Init(&Prog); +} +pkgDepCache::pkgDepCache(MMap &Map) : + pkgCache(Map), PkgState(0), DepState(0) +{ + if (_error->PendingError() == false) + Init(0); } /*}}}*/ // DepCache::~pkgDepCache - Destructor /*{{{*/ @@ -98,14 +104,15 @@ pkgDepCache::VerIterator pkgDepCache::GetCandidateVer(PkgIterator Pkg) // Try to use an explicit target if (Pkg->TargetVer == 0) { - /* Not source versions cannot be a candidate version unless they - are already installed */ + /* Not source/not automatic versions cannot be a candidate version + unless they are already installed */ for (VerIterator I = Pkg.VersionList(); I.end() == false; I++) { if (Pkg.CurrentVer() == I) return I; for (VerFileIterator J = I.FileList(); J.end() == false; J++) - if ((J.File()->Flags & Flag::NotSource) == 0) + if ((J.File()->Flags & Flag::NotSource) == 0 && + (J.File()->Flags & Flag::NotAutomatic) == 0) return I; } @@ -208,11 +215,19 @@ void pkgDepCache::AddSizes(const PkgIterator &Pkg,long Mult) { StateCache &P = PkgState[Pkg->ID]; + if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure && + P.Keep() == true) + { + iUsrSize += Mult*P.InstVerIter(*this)->InstalledSize; + return; + } + // Compute the size data if (P.NewInstall() == true) { iUsrSize += Mult*P.InstVerIter(*this)->InstalledSize; iDownloadSize += Mult*P.InstVerIter(*this)->Size; + return; } // Upgrading @@ -222,11 +237,23 @@ void pkgDepCache::AddSizes(const PkgIterator &Pkg,long Mult) iUsrSize += Mult*((signed)P.InstVerIter(*this)->InstalledSize - (signed)Pkg.CurrentVer()->InstalledSize); iDownloadSize += Mult*P.InstVerIter(*this)->Size; + return; + } + + // Reinstall + if (Pkg.State() == pkgCache::PkgIterator::NeedsUnpack && + P.Delete() == false) + { + iDownloadSize += Mult*P.InstVerIter(*this)->Size; + return; } // Removing if (Pkg->CurrentVer != 0 && P.InstallVer == 0) + { iUsrSize -= Mult*Pkg.CurrentVer()->InstalledSize; + return; + } } /*}}}*/ // DepCache::AddStates - Add the package to the state counter /*{{{*/ @@ -293,6 +320,7 @@ void pkgDepCache::BuildGroupOrs(VerIterator const &V) State = ~State; // Add to the group if we are within an or.. + State &= 0x7; Group |= State; State |= Group << 3; if ((D->CompareOp & Dep::Or) != Dep::Or) @@ -562,7 +590,10 @@ void pkgDepCache::MarkDelete(PkgIterator const &Pkg) RemoveSizes(Pkg); RemoveStates(Pkg); - P.Mode = ModeDelete; + if (Pkg->CurrentVer == 0) + P.Mode = ModeKeep; + else + P.Mode = ModeDelete; P.InstallVer = 0; P.Flags &= Flag::Auto;