diff options
-rw-r--r-- | apt-pkg/acquire.cc | 23 | ||||
-rw-r--r-- | apt-pkg/acquire.h | 9 | ||||
-rw-r--r-- | cmdline/acqprogress.cc | 8 | ||||
-rw-r--r-- | cmdline/acqprogress.h | 4 | ||||
-rw-r--r-- | cmdline/apt-get.cc | 8 |
5 files changed, 34 insertions, 18 deletions
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index e197037db..734f5e7ab 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire.cc,v 1.35 1999/06/06 06:58:36 jgg Exp $ +// $Id: acquire.cc,v 1.36 1999/06/13 05:06:40 jgg Exp $ /* ###################################################################### Acquire - File Acquiration @@ -275,7 +275,7 @@ void pkgAcquire::RunFds(fd_set *RSet,fd_set *WSet) /* This runs the queues. It manages a select loop for all of the Worker tasks. The workers interact with the queues and items to manage the actual fetch. */ -bool pkgAcquire::Run() +pkgAcquire::RunResult pkgAcquire::Run() { Running = true; @@ -285,6 +285,8 @@ bool pkgAcquire::Run() if (Log != 0) Log->Start(); + bool WasCancelled = false; + // Run till all things have been acquired struct timeval tv; tv.tv_sec = 0; @@ -321,8 +323,11 @@ bool pkgAcquire::Run() tv.tv_usec = 500000; for (Worker *I = Workers; I != 0; I = I->NextAcquire) I->Pulse(); - if (Log != 0) - Log->Pulse(this); + if (Log != 0 && Log->Pulse(this) == false) + { + WasCancelled = true; + break; + } } } @@ -338,7 +343,11 @@ bool pkgAcquire::Run() for (Item **I = Items.begin(); I != Items.end(); I++) (*I)->Finished(); - return !_error->PendingError(); + if (_error->PendingError()) + return Failed; + if (WasCancelled) + return Cancelled; + return Continue; } /*}}}*/ // Acquire::Bump - Called when an item is dequeued /*{{{*/ @@ -675,7 +684,7 @@ pkgAcquireStatus::pkgAcquireStatus() /* This computes some internal state variables for the derived classes to use. It generates the current downloaded bytes and total bytes to download as well as the current CPS estimate. */ -void pkgAcquireStatus::Pulse(pkgAcquire *Owner) +bool pkgAcquireStatus::Pulse(pkgAcquire *Owner) { TotalBytes = 0; CurrentBytes = 0; @@ -742,6 +751,8 @@ void pkgAcquireStatus::Pulse(pkgAcquire *Owner) ElapsedTime = (unsigned long)Delta; Time = NewTime; } + + return true; } /*}}}*/ // AcquireStatus::Start - Called when the download is started /*{{{*/ diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 156fc7aae..6a1583cca 100644 --- a/apt-pkg/acquire.h +++ b/apt-pkg/acquire.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire.h,v 1.20 1999/03/27 03:02:39 jgg Exp $ +// $Id: acquire.h,v 1.21 1999/06/13 05:06:40 jgg Exp $ /* ###################################################################### Acquire - File Acquiration @@ -91,7 +91,10 @@ class pkgAcquire public: MethodConfig *GetConfig(string Access); - bool Run(); + + enum RunResult {Continue,Failed,Cancelled}; + + RunResult Run(); // Simple iteration mechanism inline Worker *WorkersBegin() {return Workers;}; @@ -259,7 +262,7 @@ class pkgAcquireStatus virtual void Fetch(pkgAcquire::ItemDesc &Itm) {}; virtual void Done(pkgAcquire::ItemDesc &Itm) {}; virtual void Fail(pkgAcquire::ItemDesc &Itm) {}; - virtual void Pulse(pkgAcquire *Owner); + virtual bool Pulse(pkgAcquire *Owner); // returns false on user cancel virtual void Start(); virtual void Stop(); diff --git a/cmdline/acqprogress.cc b/cmdline/acqprogress.cc index 5e88d3cd0..d6031ad0a 100644 --- a/cmdline/acqprogress.cc +++ b/cmdline/acqprogress.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acqprogress.cc,v 1.14 1999/06/06 05:52:37 jgg Exp $ +// $Id: acqprogress.cc,v 1.15 1999/06/13 05:06:40 jgg Exp $ /* ###################################################################### Acquire Progress - Command line progress meter @@ -132,10 +132,10 @@ void AcqTextStatus::Stop() /* This draws the current progress. Each line has an overall percent meter and a per active item status meter along with an overall bandwidth and ETA indicator. */ -void AcqTextStatus::Pulse(pkgAcquire *Owner) +bool AcqTextStatus::Pulse(pkgAcquire *Owner) { if (Quiet > 0) - return; + return true; pkgAcquireStatus::Pulse(Owner); @@ -244,6 +244,8 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) BlankLine[strlen(Buffer)] = 0; Update = false; + + return true; } /*}}}*/ // AcqTextStatus::MediaChange - Media need to be swapped /*{{{*/ diff --git a/cmdline/acqprogress.h b/cmdline/acqprogress.h index 8cee3cd29..8b8da04a1 100644 --- a/cmdline/acqprogress.h +++ b/cmdline/acqprogress.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acqprogress.h,v 1.3 1998/12/04 21:16:53 jgg Exp $ +// $Id: acqprogress.h,v 1.4 1999/06/13 05:06:40 jgg Exp $ /* ###################################################################### Acquire Progress - Command line progress meter @@ -29,7 +29,7 @@ class AcqTextStatus : public pkgAcquireStatus virtual void Start(); virtual void Stop(); - void Pulse(pkgAcquire *Owner); + bool Pulse(pkgAcquire *Owner); AcqTextStatus(unsigned int &ScreenWidth,unsigned int Quiet); }; diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index a40b8a4c7..69e986978 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: apt-get.cc,v 1.64 1999/06/06 05:52:37 jgg Exp $ +// $Id: apt-get.cc,v 1.65 1999/06/13 05:06:40 jgg Exp $ /* ###################################################################### apt-get - Cover for dpkg @@ -590,7 +590,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,bool Saftey = // Run it if (_config->FindB("APT::Get::No-Download",false) == false) - if( Fetcher.Run() == false) + if( Fetcher.Run() == pkgAcquire::Failed) return false; // Print out errors @@ -679,7 +679,7 @@ bool DoUpdate(CommandLine &) } // Run it - if (Fetcher.Run() == false) + if (Fetcher.Run() == pkgAcquire::Failed) return false; // Clean out any old list files @@ -1217,7 +1217,7 @@ bool DoSource(CommandLine &CmdL) } // Run it - if (Fetcher.Run() == false) + if (Fetcher.Run() == pkgAcquire::Failed) return false; // Print error messages |