summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/progress.cc6
-rw-r--r--apt-pkg/depcache.cc57
-rw-r--r--apt-pkg/depcache.h12
-rw-r--r--apt-pkg/pkgcachegen.cc7
4 files changed, 49 insertions, 33 deletions
diff --git a/apt-pkg/contrib/progress.cc b/apt-pkg/contrib/progress.cc
index 074de0805..9a29c4b66 100644
--- a/apt-pkg/contrib/progress.cc
+++ b/apt-pkg/contrib/progress.cc
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: progress.cc,v 1.6 1998/08/26 04:52:28 jgg Exp $
+// $Id: progress.cc,v 1.7 1998/09/07 05:28:38 jgg Exp $
/* ######################################################################
OpProgress - Operation Progress
@@ -27,7 +27,9 @@ OpProgress::OpProgress() : Current(0), Total(0), Size(0), SubTotal(1),
/*}}}*/
// OpProgress::Progress - Sub progress with no state change /*{{{*/
// ---------------------------------------------------------------------
-/* This assumes that Size is the same as the current sub size */
+/* Current is the Base Overall progress in units of Total. Cur is the sub
+ progress in units of SubTotal. Size is a scaling factor that says what
+ percent of Total SubTotal is. */
void OpProgress::Progress(unsigned long Cur)
{
Percent = (Current + Cur/((float)SubTotal)*Size)*100.0/Total;
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 /*{{{*/
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index 6cb8c1187..8d90a529f 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: depcache.h,v 1.3 1998/07/12 23:58:25 jgg Exp $
+// $Id: depcache.h,v 1.4 1998/09/07 05:28:35 jgg Exp $
/* ######################################################################
DepCache - Dependency Extension data for the cache
@@ -44,6 +44,7 @@
#endif
#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/progress.h>
class pkgDepCache : public pkgCache
{
@@ -109,7 +110,7 @@ class pkgDepCache : public pkgCache
void BuildGroupOrs(VerIterator const &V);
void UpdateVerState(PkgIterator Pkg);
- bool Init();
+ bool Init(OpProgress *Prog);
protected:
@@ -165,11 +166,8 @@ class pkgDepCache : public pkgCache
void MarkInstall(PkgIterator const &Pkg,bool AutoInst = true);
// This is for debuging
- void Update();
+ void Update(OpProgress *Prog = 0);
- // Hook to keep the extra data in sync
- virtual bool ReMap();
-
// Size queries
inline long UsrSize() {return iUsrSize;};
inline long DebSize() {return iDownloadSize;};
@@ -179,7 +177,7 @@ class pkgDepCache : public pkgCache
inline long BrokenCount() {return iBrokenCount;};
inline long BadCount() {return iBadCount;};
- pkgDepCache(MMap &Map);
+ pkgDepCache(MMap &Map,OpProgress &Prog);
virtual ~pkgDepCache();
};
diff --git a/apt-pkg/pkgcachegen.cc b/apt-pkg/pkgcachegen.cc
index c3bf1cf36..825af40c0 100644
--- a/apt-pkg/pkgcachegen.cc
+++ b/apt-pkg/pkgcachegen.cc
@@ -1,6 +1,6 @@
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: pkgcachegen.cc,v 1.14 1998/08/26 04:52:23 jgg Exp $
+// $Id: pkgcachegen.cc,v 1.15 1998/09/07 05:28:37 jgg Exp $
/* ######################################################################
Package Cache Generator - Generator for the cache structure.
@@ -70,6 +70,7 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
{
List.Owner = this;
+ int Counter = 0;
while (List.Step() == true)
{
// Get a pointer to the package structure
@@ -77,7 +78,9 @@ bool pkgCacheGenerator::MergeList(ListParser &List)
pkgCache::PkgIterator Pkg;
if (NewPackage(Pkg,PackageName) == false)
return _error->Error("Error occured while processing %s (NewPackage)",PackageName.c_str());
- Progress.Progress(List.Offset());
+ Counter++;
+ if (Counter % 100 == 0)
+ Progress.Progress(List.Offset());
/* Get a pointer to the version structure. We know the list is sorted
so we use that fact in the search. Insertion of new versions is