|
@@ -1,6 +1,6 @@
|
|
|
// -*- mode: cpp; mode: fold -*-
|
|
// -*- mode: cpp; mode: fold -*-
|
|
|
// Description /*{{{*/
|
|
// 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.
|
|
Dependency Cache - Caches Dependency information.
|
|
@@ -20,11 +20,11 @@
|
|
|
// DepCache::pkgDepCache - Constructors /*{{{*/
|
|
// 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)
|
|
if (_error->PendingError() == false)
|
|
|
- Init();
|
|
|
|
|
|
|
+ Init(&Prog);
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// DepCache::~pkgDepCache - Destructor /*{{{*/
|
|
// DepCache::~pkgDepCache - Destructor /*{{{*/
|
|
@@ -36,23 +36,10 @@ pkgDepCache::~pkgDepCache()
|
|
|
delete [] DepState;
|
|
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. /*{{{*/
|
|
// DepCache::Init - Generate the initial extra structures. /*{{{*/
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* This allocats the extension buffers and initializes them. */
|
|
/* This allocats the extension buffers and initializes them. */
|
|
|
-bool pkgDepCache::Init()
|
|
|
|
|
|
|
+bool pkgDepCache::Init(OpProgress *Prog)
|
|
|
{
|
|
{
|
|
|
delete [] PkgState;
|
|
delete [] PkgState;
|
|
|
delete [] DepState;
|
|
delete [] DepState;
|
|
@@ -61,10 +48,21 @@ bool pkgDepCache::Init()
|
|
|
memset(PkgState,0,sizeof(*PkgState)*Head().PackageCount);
|
|
memset(PkgState,0,sizeof(*PkgState)*Head().PackageCount);
|
|
|
memset(DepState,0,sizeof(*DepState)*Head().DependsCount);
|
|
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
|
|
/* Set the current state of everything. In this state all of the
|
|
|
packages are kept exactly as is. See AllUpgrade */
|
|
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
|
|
// Find the proper cache slot
|
|
|
StateCache &State = PkgState[I->ID];
|
|
StateCache &State = PkgState[I->ID];
|
|
|
State.iFlags = 0;
|
|
State.iFlags = 0;
|
|
@@ -77,7 +75,16 @@ bool pkgDepCache::Init()
|
|
|
State.Update(I,*this);
|
|
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;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -392,7 +399,7 @@ void pkgDepCache::UpdateVerState(PkgIterator Pkg)
|
|
|
// ---------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------
|
|
|
/* This will figure out the state of all the packages and all the
|
|
/* This will figure out the state of all the packages and all the
|
|
|
dependencies based on the current policy. */
|
|
dependencies based on the current policy. */
|
|
|
-void pkgDepCache::Update()
|
|
|
|
|
|
|
+void pkgDepCache::Update(OpProgress *Prog)
|
|
|
{
|
|
{
|
|
|
iUsrSize = 0;
|
|
iUsrSize = 0;
|
|
|
iDownloadSize = 0;
|
|
iDownloadSize = 0;
|
|
@@ -403,8 +410,11 @@ void pkgDepCache::Update()
|
|
|
iBadCount = 0;
|
|
iBadCount = 0;
|
|
|
|
|
|
|
|
// Perform the depends pass
|
|
// 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++)
|
|
for (VerIterator V = I.VersionList(); V.end() != true; V++)
|
|
|
{
|
|
{
|
|
|
unsigned char Group = 0;
|
|
unsigned char Group = 0;
|
|
@@ -432,6 +442,9 @@ void pkgDepCache::Update()
|
|
|
UpdateVerState(I);
|
|
UpdateVerState(I);
|
|
|
AddStates(I);
|
|
AddStates(I);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (Prog != 0)
|
|
|
|
|
+ Prog->Progress(Done);
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
// DepCache::Update - Update the deps list of a package /*{{{*/
|
|
// DepCache::Update - Update the deps list of a package /*{{{*/
|