diff --git a/source/dub/packagesuppliers/registry.d b/source/dub/packagesuppliers/registry.d index 3751efb..83b01e5 100644 --- a/source/dub/packagesuppliers/registry.d +++ b/source/dub/packagesuppliers/registry.d @@ -48,18 +48,30 @@ return ret; } - void fetchPackage(NativePath path, string packageId, Dependency dep, bool pre_release) + auto genPackageDownloadUrl(string packageId, Dependency dep, bool pre_release) { import std.array : replace; import std.format : format; + import std.typecons : Nullable; auto md = getMetadata(packageId); Json best = getBestPackage(md, packageId, dep, pre_release); - if (best.type == Json.Type.null_) + Nullable!URL ret; + if (best.type != Json.Type.null_) + { + auto vers = best["version"].get!string; + ret = m_registryUrl ~ NativePath(PackagesPath~"/"~packageId~"/"~vers~".zip"); + } + return ret; + } + + void fetchPackage(NativePath path, string packageId, Dependency dep, bool pre_release) + { + import std.format : format; + auto url = genPackageDownloadUrl(packageId, dep, pre_release); + if(url.isNull) return; - auto vers = best["version"].get!string; - auto url = m_registryUrl ~ NativePath(PackagesPath~"/"~packageId~"/"~vers~".zip"); try { - retryDownload(url, path); + retryDownload(url.get, path); return; } catch(HTTPStatusException e) {