summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--methods/mirror.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/methods/mirror.cc b/methods/mirror.cc
index 0a0d07e6b..b8bd6db73 100644
--- a/methods/mirror.cc
+++ b/methods/mirror.cc
@@ -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);