瀏覽代碼

* commited the latest mirror failure detection code

Michael Vogt 19 年之前
父節點
當前提交
36280399db
共有 9 個文件被更改,包括 120 次插入95 次删除
  1. 41 10
      apt-pkg/acquire-item.cc
  2. 4 1
      apt-pkg/acquire-item.h
  3. 13 8
      apt-pkg/acquire-method.cc
  4. 5 3
      apt-pkg/acquire-method.h
  5. 23 0
      cmdline/apt-report-mirror-failure
  6. 8 9
      methods/connect.cc
  7. 4 41
      methods/mirror.cc
  8. 0 1
      methods/mirror.h
  9. 22 22
      po/apt-all.pot

+ 41 - 10
apt-pkg/acquire-item.cc

@@ -79,6 +79,10 @@ void pkgAcquire::Item::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
       Status = StatError;
       Status = StatError;
       Dequeue();
       Dequeue();
    }   
    }   
+   
+   // report mirror failure back to LP if we actually use a mirror
+   if(!UsedMirror.empty())
+      ReportMirrorFailure(ErrorText);
 }
 }
 									/*}}}*/
 									/*}}}*/
 // Acquire::Item::Start - Item has begun to download			/*{{{*/
 // Acquire::Item::Start - Item has begun to download			/*{{{*/
@@ -100,6 +104,7 @@ void pkgAcquire::Item::Done(string Message,unsigned long Size,string,
 {
 {
    // We just downloaded something..
    // We just downloaded something..
    string FileName = LookupTag(Message,"Filename");
    string FileName = LookupTag(Message,"Filename");
+   UsedMirror =  LookupTag(Message,"UsedMirror");
    if (Complete == false && FileName == DestFile)
    if (Complete == false && FileName == DestFile)
    {
    {
       if (Owner->Log != 0)
       if (Owner->Log != 0)
@@ -108,7 +113,6 @@ void pkgAcquire::Item::Done(string Message,unsigned long Size,string,
 
 
    if (FileSize == 0)
    if (FileSize == 0)
       FileSize= Size;
       FileSize= Size;
-   
    Status = StatDone;
    Status = StatDone;
    ErrorText = string();
    ErrorText = string();
    Owner->Dequeue(this);
    Owner->Dequeue(this);
@@ -131,6 +135,42 @@ void pkgAcquire::Item::Rename(string From,string To)
 }
 }
 									/*}}}*/
 									/*}}}*/
 
 
+void pkgAcquire::Item::ReportMirrorFailure(string FailCode)
+{
+   // report that Queue->Uri failed
+#if 0
+   std::cerr << "\nReportMirrorFailure: " 
+	     << UsedMirror
+	     << " FailCode: " 
+	     << FailCode << std::endl;
+#endif
+   const char *Args[40];
+   unsigned int i = 0;
+   string report = _config->Find("Methods::Mirror::ProblemReporting", 
+				 "/usr/bin/apt-report-mirror-failure");
+   if(!FileExists(report))
+      return;
+   Args[i++] = report.c_str();
+   Args[i++] = UsedMirror.c_str();
+   Args[i++] = FailCode.c_str();
+   pid_t pid = ExecFork();
+   if(pid < 0) 
+   {
+      _error->Error("ReportMirrorFailure Fork failed");
+      return;
+   }
+   else if(pid == 0) 
+   {
+      execvp(report.c_str(), (char**)Args);
+   }
+   if(!ExecWait(pid, "report-mirror-failure")) 
+   {
+      _error->Warning("Couldn't report problem to '%s'",
+		      _config->Find("Acquire::Mirror::ReportFailures").c_str());
+   }
+}
+
+
 // AcqIndex::AcqIndex - Constructor					/*{{{*/
 // AcqIndex::AcqIndex - Constructor					/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------
 /* The package file is added to the queue and a second class is 
 /* The package file is added to the queue and a second class is 
@@ -176,8 +216,6 @@ string pkgAcqIndex::Custom600Headers()
    struct stat Buf;
    struct stat Buf;
    if (stat(Final.c_str(),&Buf) != 0)
    if (stat(Final.c_str(),&Buf) != 0)
       return "\nIndex-File: true";
       return "\nIndex-File: true";
-   if(ExpectedMD5 != "")
-      return "\nExpectedMD5: " + ExpectedMD5;
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
    return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime);
 }
 }
 									/*}}}*/
 									/*}}}*/
@@ -1016,13 +1054,6 @@ void pkgAcqArchive::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
    }
    }
 }
 }
 									/*}}}*/
 									/*}}}*/
-// ---------------------------------------------------------------------
-string pkgAcqArchive::Custom600Headers()
-{
-   if(MD5 != "")
-      return "\nExpectedMD5: " + MD5;
-   return "";
-}
 // AcqArchive::IsTrusted - Determine whether this archive comes from a
 // AcqArchive::IsTrusted - Determine whether this archive comes from a
 // trusted source							/*{{{*/
 // trusted source							/*{{{*/
 // ---------------------------------------------------------------------
 // ---------------------------------------------------------------------

+ 4 - 1
apt-pkg/acquire-item.h

@@ -56,6 +56,7 @@ class pkgAcquire::Item
    unsigned long ID;
    unsigned long ID;
    bool Complete;
    bool Complete;
    bool Local;
    bool Local;
+   string UsedMirror;
 
 
    // Number of queues we are inserted into
    // Number of queues we are inserted into
    unsigned int QueueCounter;
    unsigned int QueueCounter;
@@ -78,6 +79,9 @@ class pkgAcquire::Item
    pkgAcquire *GetOwner() {return Owner;};
    pkgAcquire *GetOwner() {return Owner;};
    virtual bool IsTrusted() {return false;};
    virtual bool IsTrusted() {return false;};
    
    
+   // report mirror problems
+   void ReportMirrorFailure(string FailCode);
+
    Item(pkgAcquire *Owner);
    Item(pkgAcquire *Owner);
    virtual ~Item();
    virtual ~Item();
 };
 };
@@ -205,7 +209,6 @@ class pkgAcqArchive : public pkgAcquire::Item
    virtual string ShortDesc() {return Desc.ShortDesc;};
    virtual string ShortDesc() {return Desc.ShortDesc;};
    virtual void Finished();
    virtual void Finished();
    virtual bool IsTrusted();
    virtual bool IsTrusted();
-   virtual string Custom600Headers();
    
    
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
 		 pkgRecords *Recs,pkgCache::VerIterator const &Version,
 		 pkgRecords *Recs,pkgCache::VerIterator const &Version,

+ 13 - 8
apt-pkg/acquire-method.cc

@@ -99,12 +99,11 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
    }
    }
    
    
    char S[1024];
    char S[1024];
+   char *End = S;
    if (Queue != 0)
    if (Queue != 0)
    {
    {
-      snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
-	       "Message: %s %s\n",Queue->Uri.c_str(),Err.c_str(),
-	       FailExtra.c_str());
-
+      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n"
+		      "Message: %s %s\n",Queue->Uri.c_str(), Err.c_str(), IP.c_str());
       // Dequeue
       // Dequeue
       FetchItem *Tmp = Queue;
       FetchItem *Tmp = Queue;
       Queue = Queue->Next;
       Queue = Queue->Next;
@@ -113,10 +112,14 @@ void pkgAcqMethod::Fail(string Err,bool Transient)
 	 QueueBack = Queue;
 	 QueueBack = Queue;
    }
    }
    else
    else
-      snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
-	       "Message: %s %s\n",Err.c_str(),
-	       FailExtra.c_str());
-      
+   {
+      End += snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: <UNKNOWN>\n"
+		      "Message: %s\n",Err.c_str());
+   }
+   if(FailReason.empty() == false)
+      End += snprintf(End,sizeof(S)-50 - (End - S),"FailReason: %s\n",FailReason.c_str());
+   if (UsedMirror.empty() == false)
+      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
    // Set the transient flag 
    // Set the transient flag 
    if (Transient == true)
    if (Transient == true)
       strcat(S,"Transient-Failure: true\n\n");
       strcat(S,"Transient-Failure: true\n\n");
@@ -182,6 +185,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
       End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str());
       End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str());
    if (Res.SHA1Sum.empty() == false)
    if (Res.SHA1Sum.empty() == false)
       End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
       End += snprintf(End,sizeof(S)-50 - (End - S),"SHA1-Hash: %s\n",Res.SHA1Sum.c_str());
+   if (UsedMirror.empty() == false)
+      End += snprintf(End,sizeof(S)-50 - (End - S),"UsedMirror: %s\n",UsedMirror.c_str());
    if (Res.GPGVOutput.size() > 0)
    if (Res.GPGVOutput.size() > 0)
       End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n");     
       End += snprintf(End,sizeof(S)-50 - (End - S),"GPGVOutput:\n");     
    for (vector<string>::iterator I = Res.GPGVOutput.begin();
    for (vector<string>::iterator I = Res.GPGVOutput.begin();

+ 5 - 3
apt-pkg/acquire-method.h

@@ -55,7 +55,9 @@ class pkgAcqMethod
    vector<string> Messages;
    vector<string> Messages;
    FetchItem *Queue;
    FetchItem *Queue;
    FetchItem *QueueBack;
    FetchItem *QueueBack;
-   string FailExtra;
+   string FailReason;
+   string UsedMirror;
+   string IP;
    
    
    // Handlers for messages
    // Handlers for messages
    virtual bool Configuration(string Message);
    virtual bool Configuration(string Message);
@@ -72,7 +74,6 @@ class pkgAcqMethod
    virtual void Exit() {};
    virtual void Exit() {};
 
 
    public:
    public:
-
    enum CnfFlags {SingleInstance = (1<<0),
    enum CnfFlags {SingleInstance = (1<<0),
                   Pipeline = (1<<1), SendConfig = (1<<2),
                   Pipeline = (1<<1), SendConfig = (1<<2),
                   LocalOnly = (1<<3), NeedsCleanup = (1<<4), 
                   LocalOnly = (1<<3), NeedsCleanup = (1<<4), 
@@ -82,7 +83,8 @@ class pkgAcqMethod
    void Status(const char *Format,...);
    void Status(const char *Format,...);
    
    
    int Run(bool Single = false);
    int Run(bool Single = false);
-   inline void SetFailExtraMsg(string Msg) {FailExtra = Msg;};
+   inline void SetFailReason(string Msg) {FailReason = Msg;};
+   inline void SetIP(string aIP) {IP = aIP;};
    
    
    pkgAcqMethod(const char *Ver,unsigned long Flags = 0);
    pkgAcqMethod(const char *Ver,unsigned long Flags = 0);
    virtual ~pkgAcqMethod() {};
    virtual ~pkgAcqMethod() {};

+ 23 - 0
cmdline/apt-report-mirror-failure

@@ -0,0 +1,23 @@
+#!/usr/bin/python
+
+import sys
+import urllib
+import apt_pkg
+
+print "apt-report-mirror-failure"
+
+apt_pkg.init()
+url = apt_pkg.Config.Find("Acquire::Mirror::ReportFailures",
+                          "http://people.ubuntu.com:9000/mirror-failure")
+                          #"http://localhost:9000/mirror-failure")
+if not url:
+    sys.exit(0)
+
+data = {}
+data['url'] = sys.argv[1]
+data['error'] = sys.argv[2]
+f = urllib.urlopen(url, urllib.urlencode(data))
+f.read()
+f.close()
+
+

+ 8 - 9
methods/connect.cc

@@ -18,6 +18,7 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <errno.h>
 #include <errno.h>
 #include <unistd.h>
 #include <unistd.h>
+#include <sstream>
 
 
 // Internet stuff
 // Internet stuff
 #include <netinet/in.h>
 #include <netinet/in.h>
@@ -67,12 +68,10 @@ static bool DoConnect(struct addrinfo *Addr,string Host,
       wrong this will get tacked onto the end of the error message */
       wrong this will get tacked onto the end of the error message */
    if (LastHostAddr->ai_next != 0)
    if (LastHostAddr->ai_next != 0)
    {
    {
-      char Name2[NI_MAXHOST + NI_MAXSERV + 10];
-      snprintf(Name2,sizeof(Name2),_("[IP: %s %s]"),Name,Service);
-      Owner->SetFailExtraMsg(string(Name2));
-   }   
-   else
-      Owner->SetFailExtraMsg("");
+      std::stringstream ss;
+      ioprintf(ss, _("[IP: %s %s]"),Name,Service);
+      Owner->SetIP(ss.str());
+   }
       
       
    // Get a socket
    // Get a socket
    if ((Fd = socket(Addr->ai_family,Addr->ai_socktype,
    if ((Fd = socket(Addr->ai_family,Addr->ai_socktype,
@@ -89,7 +88,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host,
    /* This implements a timeout for connect by opening the connection
    /* This implements a timeout for connect by opening the connection
       nonblocking */
       nonblocking */
    if (WaitFd(Fd,true,TimeOut) == false) {
    if (WaitFd(Fd,true,TimeOut) == false) {
-      Owner->SetFailExtraMsg("\nFailReason: Timeout");
+      Owner->SetFailReason("Timeout");
       return _error->Error(_("Could not connect to %s:%s (%s), "
       return _error->Error(_("Could not connect to %s:%s (%s), "
 			   "connection timed out"),Host.c_str(),Service,Name);
 			   "connection timed out"),Host.c_str(),Service,Name);
    }
    }
@@ -104,7 +103,7 @@ static bool DoConnect(struct addrinfo *Addr,string Host,
    {
    {
       errno = Err;
       errno = Err;
       if(errno == ECONNREFUSED)
       if(errno == ECONNREFUSED)
-         Owner->SetFailExtraMsg("\nFailReason: ConnectionRefused");
+         Owner->SetFailReason("ConnectionRefused");
       return _error->Errno("connect",_("Could not connect to %s:%s (%s)."),Host.c_str(),
       return _error->Errno("connect",_("Could not connect to %s:%s (%s)."),Host.c_str(),
 			   Service,Name);
 			   Service,Name);
    }
    }
@@ -169,7 +168,7 @@ bool Connect(string Host,int Port,const char *Service,int DefPort,int &Fd,
 	    
 	    
 	    if (Res == EAI_AGAIN)
 	    if (Res == EAI_AGAIN)
 	    {
 	    {
-	       Owner->SetFailExtraMsg("\nFailReason: TmpResolveFailure");
+	       Owner->SetFailReason("TmpResolveFailure");
 	       return _error->Error(_("Temporary failure resolving '%s'"),
 	       return _error->Error(_("Temporary failure resolving '%s'"),
 				    Host.c_str());
 				    Host.c_str());
 	    }
 	    }

+ 4 - 41
methods/mirror.cc

@@ -38,7 +38,7 @@ using namespace std;
  * 
  * 
  * TODO: 
  * TODO: 
  * what about gpgv  failures? this should call-out to the problem reporting
  * what about gpgv  failures? this should call-out to the problem reporting
-   script, but we need to know what mirror was used
+   script, but we need to know what mirror was used -> just run pkgAcquire::Item::ReportMirrorFailure()
  * better standard format for errors to send back 
  * better standard format for errors to send back 
  * - implement failure reporting  at the pkgAcquire::Item::Failed() level 
  * - implement failure reporting  at the pkgAcquire::Item::Failed() level 
      but then we need to send back what uri exactly was failing 
      but then we need to send back what uri exactly was failing 
@@ -48,7 +48,7 @@ using namespace std;
  * - deal with runing as non-root because we can't write to the lists 
  * - deal with runing as non-root because we can't write to the lists 
      dir then -> use the cached mirror file
      dir then -> use the cached mirror file
  * - better method to download than having a pkgAcquire interface here
  * - better method to download than having a pkgAcquire interface here
- * - magicmarker is (a bit) evil, maybe just use a similar approach as in
+ * - magicmarker is evil, maybe just use a similar approach as in
      clean and read the sources.list and use the GetURI() method to find
      clean and read the sources.list and use the GetURI() method to find
      the prefix?
      the prefix?
  * support more than http
  * support more than http
@@ -191,6 +191,8 @@ bool MirrorMethod::SelectMirror()
    getline(in, Mirror);
    getline(in, Mirror);
    if(Debug)
    if(Debug)
       cerr << "Using mirror: " << Mirror << endl;
       cerr << "Using mirror: " << Mirror << endl;
+
+   UsedMirror = Mirror;
    return true;
    return true;
 }
 }
 
 
@@ -220,9 +222,6 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
 
 
 void MirrorMethod::Fail(string Err,bool Transient)
 void MirrorMethod::Fail(string Err,bool Transient)
 {
 {
-   // FIXME: queue next mirror?
-   ReportMirrorFailure(Err);
-
    if(Queue->Uri.find("http://") != string::npos)
    if(Queue->Uri.find("http://") != string::npos)
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
    pkgAcqMethod::Fail(Err, Transient);
    pkgAcqMethod::Fail(Err, Transient);
@@ -237,47 +236,11 @@ void MirrorMethod::URIStart(FetchResult &Res)
 
 
 void MirrorMethod::URIDone(FetchResult &Res,FetchResult *Alt)
 void MirrorMethod::URIDone(FetchResult &Res,FetchResult *Alt)
 {
 {
-   // FIXME: queue next mirror?
-   if(Queue->ExpectedMD5 != "" && Res.MD5Sum != Queue->ExpectedMD5)
-      ReportMirrorFailure("499 Hash mismatch");
-
    if(Queue->Uri.find("http://") != string::npos)
    if(Queue->Uri.find("http://") != string::npos)
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
    pkgAcqMethod::URIDone(Res, Alt);
    pkgAcqMethod::URIDone(Res, Alt);
 }
 }
 
 
-void MirrorMethod::ReportMirrorFailure(string FailCode)
-{
-   // report that Queue->Uri failed
-#if 0
-   std::cerr << "\nReportMirrorFailure: " 
-	     << Queue->Uri
-	     << " FailCode: " 
-	     << FailCode << std::endl;
-#endif
-   const char *Args[40];
-   unsigned int i = 0;
-   string report = _config->Find("Methods::Mirror::ProblemReporting", 
-				 "/usr/lib/apt/report-mirror-failure");
-   Args[i++] = report.c_str();
-   Args[i++] = Queue->Uri.c_str();
-   Args[i++] = FailCode.c_str();
-   pid_t pid = ExecFork();
-   if(pid < 0) 
-   {
-      _error->Error("ReportMirrorFailure Fork failed");
-      return;
-   }
-   else if(pid == 0) 
-   {
-      execvp(report.c_str(), (char**)Args);
-   }
-   if(!ExecWait(pid, "report-mirror-failure")) 
-   {
-      _error->Warning("Couldn't report problem to '%s'",
-		      _config->Find("Acquire::Mirror::ReportFailures").c_str());
-   }
-}
 
 
 int main()
 int main()
 {
 {

+ 0 - 1
methods/mirror.h

@@ -35,7 +35,6 @@ class MirrorMethod : public HttpMethod
    bool GetMirrorFile(string uri);
    bool GetMirrorFile(string uri);
    bool SelectMirror();
    bool SelectMirror();
    bool Clean(string dir);
    bool Clean(string dir);
-   void ReportMirrorFailure(string FailCode);
    
    
    // we need to overwrite those to transform the url back
    // we need to overwrite those to transform the url back
    virtual void Fail(string Why, bool Transient = false);
    virtual void Fail(string Why, bool Transient = false);

+ 22 - 22
po/apt-all.pot

@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-01-24 12:51+0100\n"
+"POT-Creation-Date: 2007-01-24 17:20+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -950,7 +950,7 @@ msgstr ""
 msgid "Calculating upgrade... "
 msgid "Calculating upgrade... "
 msgstr ""
 msgstr ""
 
 
-#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:101
+#: cmdline/apt-get.cc:1716 methods/ftp.cc:702 methods/connect.cc:100
 msgid "Failed"
 msgid "Failed"
 msgstr ""
 msgstr ""
 
 
@@ -1330,7 +1330,7 @@ msgstr ""
 
 
 #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
 #: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
 #: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324
 #: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/sourcelist.cc:324
-#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 methods/mirror.cc:96
+#: apt-pkg/acquire.cc:421 apt-pkg/clean.cc:38 methods/mirror.cc:99
 #, c-format
 #, c-format
 msgid "Unable to read %s"
 msgid "Unable to read %s"
 msgstr ""
 msgstr ""
@@ -1648,59 +1648,59 @@ msgstr ""
 msgid "Unable to invoke "
 msgid "Unable to invoke "
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:64
+#: methods/connect.cc:65
 #, c-format
 #, c-format
 msgid "Connecting to %s (%s)"
 msgid "Connecting to %s (%s)"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:71
+#: methods/connect.cc:72
 #, c-format
 #, c-format
 msgid "[IP: %s %s]"
 msgid "[IP: %s %s]"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:80
+#: methods/connect.cc:79
 #, c-format
 #, c-format
 msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
 msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:86
+#: methods/connect.cc:85
 #, c-format
 #, c-format
 msgid "Cannot initiate the connection to %s:%s (%s)."
 msgid "Cannot initiate the connection to %s:%s (%s)."
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:93
+#: methods/connect.cc:92
 #, c-format
 #, c-format
 msgid "Could not connect to %s:%s (%s), connection timed out"
 msgid "Could not connect to %s:%s (%s), connection timed out"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:108
+#: methods/connect.cc:107
 #, c-format
 #, c-format
 msgid "Could not connect to %s:%s (%s)."
 msgid "Could not connect to %s:%s (%s)."
 msgstr ""
 msgstr ""
 
 
 #. We say this mainly because the pause here is for the
 #. We say this mainly because the pause here is for the
 #. ssh connection that is still going
 #. ssh connection that is still going
-#: methods/connect.cc:136 methods/rsh.cc:425
+#: methods/connect.cc:135 methods/rsh.cc:425
 #, c-format
 #, c-format
 msgid "Connecting to %s"
 msgid "Connecting to %s"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:167
+#: methods/connect.cc:166
 #, c-format
 #, c-format
 msgid "Could not resolve '%s'"
 msgid "Could not resolve '%s'"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:173
+#: methods/connect.cc:172
 #, c-format
 #, c-format
 msgid "Temporary failure resolving '%s'"
 msgid "Temporary failure resolving '%s'"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:176
+#: methods/connect.cc:175
 #, c-format
 #, c-format
 msgid "Something wicked happened resolving '%s:%s' (%i)"
 msgid "Something wicked happened resolving '%s:%s' (%i)"
 msgstr ""
 msgstr ""
 
 
-#: methods/connect.cc:223
+#: methods/connect.cc:222
 #, c-format
 #, c-format
 msgid "Unable to connect to %s %s:"
 msgid "Unable to connect to %s %s:"
 msgstr ""
 msgstr ""
@@ -1956,7 +1956,7 @@ msgid "Unable to stat the mount point %s"
 msgstr ""
 msgstr ""
 
 
 #: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44
 #: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:427 apt-pkg/clean.cc:44
-#: methods/mirror.cc:102
+#: methods/mirror.cc:105
 #, c-format
 #, c-format
 msgid "Unable to change to %s"
 msgid "Unable to change to %s"
 msgstr ""
 msgstr ""
@@ -2357,40 +2357,40 @@ msgstr ""
 msgid "IO Error saving source cache"
 msgid "IO Error saving source cache"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:126
+#: apt-pkg/acquire-item.cc:128
 #, c-format
 #, c-format
 msgid "rename failed, %s (%s -> %s)."
 msgid "rename failed, %s (%s -> %s)."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:237 apt-pkg/acquire-item.cc:946
+#: apt-pkg/acquire-item.cc:275 apt-pkg/acquire-item.cc:984
 msgid "MD5Sum mismatch"
 msgid "MD5Sum mismatch"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:641
+#: apt-pkg/acquire-item.cc:679
 msgid "There is no public key available for the following key IDs:\n"
 msgid "There is no public key available for the following key IDs:\n"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:754
+#: apt-pkg/acquire-item.cc:792
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "I wasn't able to locate a file for the %s package. This might mean you need "
 "to manually fix this package. (due to missing arch)"
 "to manually fix this package. (due to missing arch)"
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:813
+#: apt-pkg/acquire-item.cc:851
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "I wasn't able to locate file for the %s package. This might mean you need to "
 "I wasn't able to locate file for the %s package. This might mean you need to "
 "manually fix this package."
 "manually fix this package."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:849
+#: apt-pkg/acquire-item.cc:887
 #, c-format
 #, c-format
 msgid ""
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
 "The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 msgstr ""
 
 
-#: apt-pkg/acquire-item.cc:936
+#: apt-pkg/acquire-item.cc:974
 msgid "Size mismatch"
 msgid "Size mismatch"
 msgstr ""
 msgstr ""