diff options
-rw-r--r-- | apt-pkg/acquire-method.cc | 6 | ||||
-rw-r--r-- | apt-pkg/acquire-worker.cc | 37 | ||||
-rw-r--r-- | apt-pkg/acquire-worker.h | 5 | ||||
-rw-r--r-- | apt-pkg/acquire.h | 7 | ||||
-rw-r--r-- | apt-pkg/contrib/strutl.cc | 4 | ||||
-rw-r--r-- | cmdline/acqprogress.cc | 19 | ||||
-rw-r--r-- | cmdline/acqprogress.h | 3 | ||||
-rw-r--r-- | doc/method.sgml | 11 |
8 files changed, 73 insertions, 19 deletions
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 7c3fdecb3..1cebf9a71 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-method.cc,v 1.10 1998/12/03 07:29:16 jgg Exp $ +// $Id: acquire-method.cc,v 1.11 1998/12/04 21:16:46 jgg Exp $ /* ###################################################################### Acquire Method @@ -230,8 +230,8 @@ void pkgAcqMethod::MediaFail(string Required,string Drive) Messages.push_back(MyMessages.front()); MyMessages.erase(MyMessages.begin()); } - - return; + + return StringToBool(LookupTag(Message,"Fail"),false); } Messages.push_back(Message); diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 3e76b3d9d..67bb61207 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-worker.cc,v 1.13 1998/11/29 01:24:18 jgg Exp $ +// $Id: acquire-worker.cc,v 1.14 1998/12/04 21:16:47 jgg Exp $ /* ###################################################################### Acquire Worker @@ -26,6 +26,7 @@ #include <unistd.h> #include <signal.h> #include <wait.h> +#include <stdio.h> /*}}}*/ // Worker::Worker - Constructor for Queue startup /*{{{*/ @@ -288,6 +289,11 @@ bool pkgAcquire::Worker::RunMessages() case 401: _error->Error("Method %s General failure: %s",LookupTag(Message,"Message").c_str()); break; + + // 403 Media Change + case 403: + MediaChange(Message); + break; } } return true; @@ -321,6 +327,32 @@ bool pkgAcquire::Worker::Capabilities(string Message) return true; } /*}}}*/ +// Worker::MediaChange - Request a media change /*{{{*/ +// --------------------------------------------------------------------- +/* */ +bool pkgAcquire::Worker::MediaChange(string Message) +{ + if (Log == 0 || Log->MediaChange(LookupTag(Message,"Media"), + LookupTag(Message,"Drive")) == false) + { + char S[300]; + sprintf(S,"603 Media Changed\nFailed: true\n\n"); + if (Debug == true) + clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl; + OutQueue += S; + OutReady = true; + return true; + } + + char S[300]; + sprintf(S,"603 Media Changed\n\n"); + if (Debug == true) + clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl; + OutQueue += S; + OutReady = true; + return true; +} + /*}}}*/ // Worker::SendConfiguration - Send the config to the method /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -451,8 +483,7 @@ void pkgAcquire::Worker::Pulse() { if (CurrentItem == 0) return; - - + struct stat Buf; if (stat(CurrentItem->Owner->DestFile.c_str(),&Buf) != 0) return; diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h index 95ba340ac..29bdcc299 100644 --- a/apt-pkg/acquire-worker.h +++ b/apt-pkg/acquire-worker.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-worker.h,v 1.7 1998/11/09 01:09:24 jgg Exp $ +// $Id: acquire-worker.h,v 1.8 1998/12/04 21:16:48 jgg Exp $ /* ###################################################################### Acquire Worker - Worker process manager @@ -61,7 +61,8 @@ class pkgAcquire::Worker // The message handlers bool Capabilities(string Message); bool SendConfiguration(); - + bool MediaChange(string Message); + bool MethodFailure(); void ItemDone(); diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h index 1526a1f7a..dc3896d3f 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.15 1998/11/29 01:24:20 jgg Exp $ +// $Id: acquire.h,v 1.16 1998/12/04 21:16:49 jgg Exp $ /* ###################################################################### Acquire - File Acquiration @@ -208,11 +208,14 @@ class pkgAcquireStatus // Called by items when they have finished a real download virtual void Fetched(unsigned long Size,unsigned long ResumePoint); + // Called to change media + virtual bool MediaChange(string Media,string Drive) = 0; + // Each of these is called by the workers when an event occures virtual void IMSHit(pkgAcquire::ItemDesc &Itm) {}; virtual void Fetch(pkgAcquire::ItemDesc &Itm) {}; virtual void Done(pkgAcquire::ItemDesc &Itm) {}; - virtual void Fail(pkgAcquire::ItemDesc &Itm) {}; + virtual void Fail(pkgAcquire::ItemDesc &Itm) {}; virtual void Pulse(pkgAcquire *Owner); virtual void Start(); virtual void Stop(); diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 273118e9d..499b72a5e 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: strutl.cc,v 1.14 1998/12/03 07:29:18 jgg Exp $ +// $Id: strutl.cc,v 1.15 1998/12/04 21:16:50 jgg Exp $ /* ###################################################################### String Util - Some usefull string functions. @@ -640,7 +640,7 @@ void URI::CopyFrom(string U) Path = "/"; // Now we attempt to locate a user:pass@host fragment - if (U[1] == '/' && U[2] == '/') + if (FirstColon[1] == '/' && FirstColon[2] == '/') FirstColon += 3; else FirstColon += 1; diff --git a/cmdline/acqprogress.cc b/cmdline/acqprogress.cc index c80d4a670..01f6f7945 100644 --- a/cmdline/acqprogress.cc +++ b/cmdline/acqprogress.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acqprogress.cc,v 1.4 1998/11/28 20:56:08 jgg Exp $ +// $Id: acqprogress.cc,v 1.5 1998/12/04 21:16:52 jgg Exp $ /* ###################################################################### Acquire Progress - Command line progress meter @@ -228,3 +228,20 @@ void AcqTextStatus::Pulse(pkgAcquire *Owner) Update = false; } /*}}}*/ +// AcqTextStatus::MediaChange - Media need to be swapped /*{{{*/ +// --------------------------------------------------------------------- +/* Prompt for a media swap */ +bool AcqTextStatus::MediaChange(string Media,string Drive) +{ + if (Quiet <= 0) + cout << '\r' << BlankLine << '\r'; + cout << "Media Change: Please insert the Disc labeled '" << Media << "' in "\ + " the drive '" << Drive << "' and press a key" << endl; + + char C; + read(STDIN_FILENO,&C,1); + + Update = true; + return true; +} + /*}}}*/ diff --git a/cmdline/acqprogress.h b/cmdline/acqprogress.h index 9dd5c60cf..8cee3cd29 100644 --- a/cmdline/acqprogress.h +++ b/cmdline/acqprogress.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acqprogress.h,v 1.2 1998/11/12 05:30:09 jgg Exp $ +// $Id: acqprogress.h,v 1.3 1998/12/04 21:16:53 jgg Exp $ /* ###################################################################### Acquire Progress - Command line progress meter @@ -21,6 +21,7 @@ class AcqTextStatus : public pkgAcquireStatus public: + virtual bool MediaChange(string Media,string Drive); virtual void IMSHit(pkgAcquire::ItemDesc &Itm); virtual void Fetch(pkgAcquire::ItemDesc &Itm); virtual void Done(pkgAcquire::ItemDesc &Itm); diff --git a/doc/method.sgml b/doc/method.sgml index 35070d919..d1ebddcf5 100644 --- a/doc/method.sgml +++ b/doc/method.sgml @@ -4,7 +4,7 @@ <title>APT Method Interface </title> <author>Jason Gunthorpe <email>jgg@debian.org</email></author> -<version>$Id: method.sgml,v 1.4 1998/10/30 07:53:49 jgg Exp $</version> +<version>$Id: method.sgml,v 1.5 1998/12/04 21:16:54 jgg Exp $</version> <abstract> This document describes the interface that APT uses to the archive @@ -207,6 +207,8 @@ The following is a short index of the header fields that are supported <tag>Site<item>String indicating the site authorization is required for <tag>User<item>Username for authorization <tag>Password<item>Password for authorization +<tag>Fail<item>Operation failed +<tag>Drive<item>Drive the media should be placed in <tag>Config-Item<item> A string of the form <var>item</>=<var>value</> derived from the APT configuration space. These may include method specific values and general @@ -214,9 +216,8 @@ values not related to the method. It is up to the method to filter out the ones it wants. <tag>Single-Instance<item>Requires that only one instance of the method be run This is a yes/no value. -<tag>Pre-Scan<item>Method can detect if archives are already available. - This is a yes/no value. <tag>Pipeline<item>The method is capable of pipelining. +<tag>Local<item>The method only returns Filename: feilds. <tag>Send-Config<item>Send configuration to the method. <tag>Version<item>Version string for the method </taglist> @@ -279,7 +280,7 @@ Fields: Site <tag>403 Media Failure<item> A method that deals with multiple media requires that a new media be inserted. The Media field contains the name of the media to be inserted. -Fields: Media +Fields: Media, Drive <tag>600 URI Acquire<item> APT is requesting that a new URI be added to the acquire list. Last-Modified @@ -301,7 +302,7 @@ Fields: Site, User, Password <tag>603 Media Changed<item> This is sent in response to a <em>403 Media Failure</> message. It indicates that the user has changed media and it is safe to proceed. -Fields: Media +Fields: Media, Fail </taglist> </sect> |