diff --git a/source/dub/commandline.d b/source/dub/commandline.d index 76aa868..9c6702c 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -229,10 +229,11 @@ // should simply retry over all registries instead of using a special // FallbackPackageSupplier. auto urls = url.splitter(' '); - auto ps = new RegistryPackageSupplier(URL(urls.front)); + PackageSupplier ps = new RegistryPackageSupplier(URL(urls.front)); urls.popFront; if (!urls.empty) - ps = new FallbackPackageSupplier(ps, urls.map!(u => new RegistryPackageSupplier(URL(u))).array); + ps = new FallbackPackageSupplier(ps, + urls.map!(u => cast(PackageSupplier) new RegistryPackageSupplier(URL(u))).array); return ps; }) .array; diff --git a/test/fetchzip.sh b/test/fetchzip.sh index 05c3a98..f32cd04 100755 --- a/test/fetchzip.sh +++ b/test/fetchzip.sh @@ -44,3 +44,9 @@ die 'DUB should not have installed a package.' fi +echo "HTTP status errors on downloads should retry with fallback mirror - gitcompatibledubpackage (1.0.2)" +timeout 1s "$DUB" fetch gitcompatibledubpackage --version=1.0.2 --skip-registry=all --registry="http://localhost:$PORT http://localhost:$PORT/fallback" +if [ $? -eq 124 ]; then + die 'Fetching from responsive registry should not time-out.' +fi +dub remove gitcompatibledubpackage --non-interactive --version=1.0.2 diff --git a/test/test_registry.d b/test/test_registry.d index 4e10024..625ff03 100644 --- a/test/test_registry.d +++ b/test/test_registry.d @@ -17,6 +17,7 @@ res.writeBody("", HTTPStatus.badGateway); }); router.get("*", folder.serveStaticFiles); + router.get("/fallback/*", folder.serveStaticFiles(new HTTPFileServerSettings("/fallback"))); listenHTTP(text(":", port), router); runApplication(); }