summaryrefslogtreecommitdiff
path: root/apt-pkg/depcache.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/depcache.cc')
-rw-r--r--apt-pkg/depcache.cc57
1 files changed, 35 insertions, 22 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 71a0d02a2..a0896b3dc 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.2 1998/07/12 23:58:24 jgg Exp $
+// $Id: depcache.cc,v 1.3 1998/09/07 05:28:32 jgg Exp $
/* ######################################################################
Dependency Cache - Caches Dependency information.
@@ -20,11 +20,11 @@
// DepCache::pkgDepCache - Constructors /*{{{*/
// ---------------------------------------------------------------------
/* */
-pkgDepCache::pkgDepCache(MMap &Map) :
- pkgCache(Map), PkgState(0), DepState(0)
+pkgDepCache::pkgDepCache(MMap &Map,OpProgress &Prog) :
+ pkgCache(Map), PkgState(0), DepState(0)
{
if (_error->PendingError() == false)
- Init();
+ Init(&Prog);
}
/*}}}*/
// DepCache::~pkgDepCache - Destructor /*{{{*/
@@ -36,23 +36,10 @@ pkgDepCache::~pkgDepCache()
delete [] DepState;
}
/*}}}*/
-// DepCache::ReMap - Regenerate the extra data for the new cache /*{{{*/
-// ---------------------------------------------------------------------
-/* pkgCache's constructors call this function, but because the object is not
- fully constructed at that point it will not result in this function being
- called but pkgCache::ReMap will be instead.*/
-bool pkgDepCache::ReMap()
-{
- if (pkgCache::ReMap() == false)
- return false;
-
- return Init();
-}
- /*}}}*/
// DepCache::Init - Generate the initial extra structures. /*{{{*/
// ---------------------------------------------------------------------
/* This allocats the extension buffers and initializes them. */
-bool pkgDepCache::Init()
+bool pkgDepCache::Init(OpProgress *Prog)
{
delete [] PkgState;
delete [] DepState;
@@ -61,10 +48,21 @@ bool pkgDepCache::Init()
memset(PkgState,0,sizeof(*PkgState)*Head().PackageCount);
memset(DepState,0,sizeof(*DepState)*Head().DependsCount);
+ if (Prog != 0)
+ {
+ Prog->OverallProgress(0,2*Head().PackageCount,Head().PackageCount,
+ "Building Dependancy Tree");
+ Prog->SubProgress(Head().PackageCount,"Candidate Versions");
+ }
+
/* Set the current state of everything. In this state all of the
packages are kept exactly as is. See AllUpgrade */
- for (PkgIterator I = PkgBegin(); I.end() != true; I++)
+ int Done = 0;
+ for (PkgIterator I = PkgBegin(); I.end() != true; I++,Done++)
{
+ if (Prog != 0)
+ Prog->Progress(Done);
+
// Find the proper cache slot
StateCache &State = PkgState[I->ID];
State.iFlags = 0;
@@ -77,7 +75,16 @@ bool pkgDepCache::Init()
State.Update(I,*this);
}
- Update();
+ if (Prog != 0)
+ {
+
+ Prog->OverallProgress(Head().PackageCount,2*Head().PackageCount,
+ Head().PackageCount,
+ "Building Dependancy Tree");
+ Prog->SubProgress(Head().PackageCount,"Dependency Generation");
+ }
+
+ Update(Prog);
return true;
}
@@ -392,7 +399,7 @@ void pkgDepCache::UpdateVerState(PkgIterator Pkg)
// ---------------------------------------------------------------------
/* This will figure out the state of all the packages and all the
dependencies based on the current policy. */
-void pkgDepCache::Update()
+void pkgDepCache::Update(OpProgress *Prog)
{
iUsrSize = 0;
iDownloadSize = 0;
@@ -403,8 +410,11 @@ void pkgDepCache::Update()
iBadCount = 0;
// Perform the depends pass
- for (PkgIterator I = PkgBegin(); I.end() != true; I++)
+ int Done = 0;
+ for (PkgIterator I = PkgBegin(); I.end() != true; I++,Done++)
{
+ if (Prog != 0 && Done%20 == 0)
+ Prog->Progress(Done);
for (VerIterator V = I.VersionList(); V.end() != true; V++)
{
unsigned char Group = 0;
@@ -432,6 +442,9 @@ void pkgDepCache::Update()
UpdateVerState(I);
AddStates(I);
}
+
+ if (Prog != 0)
+ Prog->Progress(Done);
}
/*}}}*/
// DepCache::Update - Update the deps list of a package /*{{{*/