methods/mirror.cc: on fail try the next mirror
authorMichael Vogt <michael.vogt@ubuntu.com>
Wed, 2 Jun 2010 14:51:25 +0000 (16:51 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Wed, 2 Jun 2010 14:51:25 +0000 (16:51 +0200)
methods/mirror.cc

index 0a0d07e..b8bd6db 100644 (file)
@@ -197,7 +197,8 @@ bool MirrorMethod::InitMirrors()
    while (!in.eof()) 
    {
       getline(in, s);
-      AllMirrors.push_back(s);
+      if (s.size() > 0)
+        AllMirrors.push_back(s);
    }
    SelectNextMirror();
    return true;
@@ -314,6 +315,15 @@ bool MirrorMethod::Fetch(FetchItem *Itm)
 
 void MirrorMethod::Fail(string Err,bool Transient)
 {
+   // try the next mirror on fail
+   string old_mirror = Mirror;
+   if (SelectNextMirror()) 
+   {
+      Queue->Uri.replace(0, old_mirror.size(), Mirror);
+      return;
+   }
+
+   // all mirrors failed, so bail out
    if(Queue->Uri.find("http://") != string::npos)
       Queue->Uri.replace(0,Mirror.size(), BaseUri);
    pkgAcqMethod::Fail(Err, Transient);