summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/acquire.cc23
-rw-r--r--apt-pkg/acquire.h9
-rw-r--r--cmdline/acqprogress.cc8
-rw-r--r--cmdline/acqprogress.h4
-rw-r--r--cmdline/apt-get.cc8
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