// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: depcache.cc,v 1.13 1998/12/22 07:58:50 jgg Exp $
+// $Id: depcache.cc,v 1.17 1999/04/16 21:46:13 jgg Exp $
/* ######################################################################
Dependency Cache - Caches Dependency information.
#pragma implementation "apt-pkg/depcache.h"
#endif
#include <apt-pkg/depcache.h>
-#include <apt-pkg/configuration.h>
#include <apt-pkg/version.h>
#include <apt-pkg/error.h>
// ---------------------------------------------------------------------
/* The default just returns the target version if it exists or the
highest version. */
-pkgDepCache::VerIterator pkgDepCache::GetCandidateVer(PkgIterator Pkg)
+pkgDepCache::VerIterator pkgDepCache::GetCandidateVer(PkgIterator Pkg,
+ bool AllowCurrent)
{
// Try to use an explicit target
- if (Pkg->TargetVer == 0)
- {
- string DistHack = _config->Find("to");
-
- /* If disthack is set then we look for a dist by that name to install
- from */
- if (DistHack.empty() == false)
- {
- for (VerIterator I = Pkg.VersionList(); I.end() == false; I++)
- {
- for (VerFileIterator J = I.FileList(); J.end() == false; J++)
- if ((J.File()->Flags & Flag::NotSource) == 0 &&
- (J.File()->Flags & Flag::NotAutomatic) == 0 &&
- J.File().Archive() == DistHack)
- return I;
- }
-
- // Hmm, target is current if there is no alternative.
- if (Pkg->CurrentVer != 0)
- return Pkg.CurrentVer();
- }
- else
- {
- /* 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 &&
- (J.File()->Flags & Flag::NotAutomatic) == 0)
- return I;
- }
- }
-
- return VerIterator(*this,0);
- }
+ if (Pkg->TargetVer == 0 ||
+ (AllowCurrent == false && Pkg.TargetVer() == Pkg.CurrentVer()))
+ return pkgCache::GetCandidateVer(Pkg,AllowCurrent);
else
return Pkg.TargetVer();
}
{
StateCache &P = PkgState[Pkg->ID];
- if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure)
- {
- iUsrSize += Mult*P.InstVerIter(*this)->InstalledSize;
+ if (Pkg.State() == pkgCache::PkgIterator::NeedsConfigure &&
+ P.Keep() == true)
return;
- }
// Compute the size data
if (P.NewInstall() == true)
{
if (State.Mode == ModeDelete)
iDelCount += Add;
- if (State.Mode == ModeInstall)
- iInstCount += Add;
return;
}