// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: acquire-worker.cc,v 1.25 1999/08/03 02:25:38 jgg Exp $
+// $Id: acquire-worker.cc,v 1.32 2001/02/20 07:03:17 jgg Exp $
/* ######################################################################
Acquire Worker
#include <apt-pkg/fileutl.h>
#include <apt-pkg/strutl.h>
+#include <apti18n.h>
+
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
if (Process > 0)
{
- kill(Process,SIGINT);
+ /* Closing of stdin is the signal to exit and die when the process
+ indicates it needs cleanup */
+ if (Config->NeedsCleanup == false)
+ kill(Process,SIGINT);
ExecWait(Process,Access.c_str(),true);
}
}
// Get the method path
string Method = _config->FindDir("Dir::Bin::Methods") + Access;
if (FileExists(Method) == false)
- return _error->Error("The method driver %s could not be found.",Method.c_str());
+ return _error->Error(_("The method driver %s could not be found."),Method.c_str());
if (Debug == true)
clog << "Starting method '" << Method << '\'' << endl;
return false;
}
for (int I = 0; I != 4; I++)
- SetCloseExec(Pipes[0],true);
+ SetCloseExec(Pipes[I],true);
// Fork off the process
Process = ExecFork();
// Read the configuration data
if (WaitFd(InFd) == false ||
ReadMessages() == false)
- return _error->Error("Method %s did not start correctly",Method.c_str());
+ return _error->Error(_("Method %s did not start correctly"),Method.c_str());
RunMessages();
if (OwnerQ != 0)
ResumePoint = atoi(LookupTag(Message,"Resume-Point","0").c_str());
Itm->Owner->Start(Message,atoi(LookupTag(Message,"Size","0").c_str()));
+ // Display update before completion
+ if (Log != 0 && Log->MorePulses == true)
+ Log->Pulse(Itm->Owner->GetOwner());
+
if (Log != 0)
Log->Fetch(*Itm);
_error->Error("Method gave invalid 201 URI Done message");
break;
}
-
- Pulse();
+
pkgAcquire::Item *Owner = Itm->Owner;
pkgAcquire::ItemDesc Desc = *Itm;
+
+ // Display update before completion
+ if (Log != 0 && Log->MorePulses == true)
+ Log->Pulse(Owner->GetOwner());
+
OwnerQ->ItemDone(Itm);
- if (TotalSize != 0 &&
- atoi(LookupTag(Message,"Size","0").c_str()) != TotalSize)
- _error->Warning("Bizzar Error - File size is not what the server reported %s %u",
+ if (TotalSize != 0 &&
+ (unsigned)atoi(LookupTag(Message,"Size","0").c_str()) != TotalSize)
+ _error->Warning("Bizarre Error - File size is not what the server reported %s %lu",
LookupTag(Message,"Size","0").c_str(),TotalSize);
-
- Owner->Done(Message,CurrentSize,
- LookupTag(Message,"MD5-Hash"));
+
+ Owner->Done(Message,atoi(LookupTag(Message,"Size","0").c_str()),
+ LookupTag(Message,"MD5-Hash"),Config);
ItemDone();
// Log that we are done
break;
}
+ // Display update before completion
+ if (Log != 0 && Log->MorePulses == true)
+ Log->Pulse(Itm->Owner->GetOwner());
+
pkgAcquire::Item *Owner = Itm->Owner;
pkgAcquire::ItemDesc Desc = *Itm;
OwnerQ->ItemDone(Itm);
// 401 General Failure
case 401:
- _error->Error("Method %s General failure: %s",LookupTag(Message,"Message").c_str());
+ _error->Error("Method %s General failure: %s",Access.c_str(),LookupTag(Message,"Message").c_str());
break;
// 403 Media Change
Config->Pipeline = StringToBool(LookupTag(Message,"Pipeline"),false);
Config->SendConfig = StringToBool(LookupTag(Message,"Send-Config"),false);
Config->LocalOnly = StringToBool(LookupTag(Message,"Local-Only"),false);
+ Config->NeedsCleanup = StringToBool(LookupTag(Message,"Needs-Cleanup"),false);
+ Config->Removable = StringToBool(LookupTag(Message,"Removable"),false);
// Some debug text
if (Debug == true)
{
clog << "Configured access method " << Config->Access << endl;
- clog << "Version:" << Config->Version << " SingleInstance:" <<
- Config->SingleInstance <<
- " Pipeline:" << Config->Pipeline << " SendConfig:" <<
- Config->SendConfig << endl;
+ clog << "Version:" << Config->Version <<
+ " SingleInstance:" << Config->SingleInstance <<
+ " Pipeline:" << Config->Pipeline <<
+ " SendConfig:" << Config->SendConfig <<
+ " LocalOnly: " << Config->LocalOnly <<
+ " NeedsCleanup: " << Config->NeedsCleanup <<
+ " Removable: " << Config->Removable << endl;
}
return true;
{
if (Top->Value.empty() == false)
{
- string Line = "Config-Item: " + Top->FullTag() + "=";
+ string Line = "Config-Item: " + QuoteString(Top->FullTag(),"=\"\n") + "=";
Line += QuoteString(Top->Value,"\n") + '\n';
Message += Line;
}