X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e331f6edcb86e6acb2888ec0721e55bf43e10bc2..f17ac0977167d1e58316d3b3f7159f65d40a090a:/apt-pkg/acquire-worker.cc diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index fa349a56a..099a43e2e 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.12 1998/11/14 01:39:44 jgg Exp $ +// $Id: acquire-worker.cc,v 1.19 1999/01/30 08:08:54 jgg Exp $ /* ###################################################################### Acquire Worker @@ -20,12 +20,13 @@ #include #include #include -#include +#include #include #include #include #include +#include /*}}}*/ // Worker::Worker - Constructor for Queue startup /*{{{*/ @@ -135,7 +136,7 @@ bool pkgAcquire::Worker::Start() Args[1] = 0; execv(Args[0],(char **)Args); cerr << "Failed to exec method " << Args[0] << endl; - exit(100); + _exit(100); } // Fix up our FDs @@ -256,7 +257,12 @@ bool pkgAcquire::Worker::RunMessages() { if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true || StringToBool(LookupTag(Message,"Alt-IMS-Hit"),false) == true) - Log->IMSHit(Desc); + { + /* Hide 'hits' for local only sources - we also manage to + hide gets */ + if (Config->LocalOnly == false) + Log->IMSHit(Desc); + } else Log->Done(Desc); } @@ -275,12 +281,12 @@ bool pkgAcquire::Worker::RunMessages() pkgAcquire::Item *Owner = Itm->Owner; pkgAcquire::ItemDesc Desc = *Itm; OwnerQ->ItemDone(Itm); - Owner->Failed(Message); + Owner->Failed(Message,Config); ItemDone(); - + if (Log != 0) Log->Fail(Desc); - + break; } @@ -288,6 +294,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; @@ -304,7 +315,6 @@ bool pkgAcquire::Worker::Capabilities(string Message) Config->Version = LookupTag(Message,"Version"); Config->SingleInstance = StringToBool(LookupTag(Message,"Single-Instance"),false); - Config->PreScan = StringToBool(LookupTag(Message,"Pre-Scan"),false); Config->Pipeline = StringToBool(LookupTag(Message,"Pipeline"),false); Config->SendConfig = StringToBool(LookupTag(Message,"Send-Config"),false); Config->LocalOnly = StringToBool(LookupTag(Message,"Local-Only"),false); @@ -314,11 +324,37 @@ bool pkgAcquire::Worker::Capabilities(string Message) { clog << "Configured access method " << Config->Access << endl; clog << "Version:" << Config->Version << " SingleInstance:" << - Config->SingleInstance << " PreScan: " << Config->PreScan << + Config->SingleInstance << " Pipeline:" << Config->Pipeline << " SendConfig:" << Config->SendConfig << endl; } + 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; } /*}}}*/ @@ -429,7 +465,8 @@ bool pkgAcquire::Worker::InFdReady() read returned -1. */ bool pkgAcquire::Worker::MethodFailure() { - cerr << "Method " << Access << " has died unexpectedly!" << endl; + _error->Error("Method %s has died unexpectedly!",Access.c_str()); + if (waitpid(Process,0,0) != Process) _error->Warning("I waited but nothing was there!"); Process = -1; @@ -452,8 +489,7 @@ void pkgAcquire::Worker::Pulse() { if (CurrentItem == 0) return; - - + struct stat Buf; if (stat(CurrentItem->Owner->DestFile.c_str(),&Buf) != 0) return;