summaryrefslogtreecommitdiffstats
path: root/urpm/mirrors.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/mirrors.pm')
-rw-r--r--urpm/mirrors.pm21
1 files changed, 21 insertions, 0 deletions
diff --git a/urpm/mirrors.pm b/urpm/mirrors.pm
index bee7a8b0..37a06b40 100644
--- a/urpm/mirrors.pm
+++ b/urpm/mirrors.pm
@@ -24,6 +24,27 @@ sub try {
0;
}
+#- similar to try() above, but failure is "normal"
+#- (useful when we lookup a file)
+#-
+#- $medium fields used: mirrorlist, with-dir
+#- side-effects: $medium->{url}
+#- + those of list_urls ($urpm->{mirrors_cache})
+sub try_probe {
+ my ($urpm, $medium, $try) = @_;
+
+ my $nb = 0;
+ foreach my $mirror (map { @$_ } list_urls($urpm, $medium, '')) {
+ $nb++ < $urpm->{options}{'max-round-robin-probes'} or last;
+ my $url = $mirror->{url};
+ $nb > 1 ? $urpm->{info}(N("trying again with mirror %s", $url))
+ : $urpm->{log}("using mirror $url");
+ $medium->{url} = _add__with_dir($url, $medium->{'with-dir'});
+ $try->() and return 1;
+ }
+ 0;
+}
+
#- side-effects: none
sub _add__with_dir {
my ($url, $with_dir) = @_;