diff --git a/source/dub/dub.d b/source/dub/dub.d index 332ef54..bcae42f 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -848,7 +848,7 @@ PackageSupplier supplier; foreach(ps; m_packageSuppliers){ try { - pinfo = ps.fetchPackageRecipe(basePackageName, Dependency(range), (options & FetchOptions.usePrerelease) != 0); + pinfo = ps.fetchPackageRecipe(basePackageName, range, (options & FetchOptions.usePrerelease) != 0); if (pinfo.type == Json.Type.null_) continue; supplier = ps; @@ -895,7 +895,7 @@ import std.zip : ZipException; auto path = getTempFile(basePackageName, ".zip"); - supplier.fetchPackage(path, basePackageName, Dependency(range), (options & FetchOptions.usePrerelease) != 0); // Q: continue on fail? + supplier.fetchPackage(path, basePackageName, range, (options & FetchOptions.usePrerelease) != 0); // Q: continue on fail? scope(exit) removeFile(path); logDiagnostic("Placing to %s...", location.toString()); @@ -1790,7 +1790,7 @@ foreach (ps; m_dub.m_packageSuppliers) { if (rootpack == name) { try { - auto desc = ps.fetchPackageRecipe(name, dep, prerelease); + auto desc = ps.fetchPackageRecipe(name, VersionRange(vers, vers), prerelease); if (desc.type == Json.Type.null_) continue; auto ret = new Package(desc); diff --git a/source/dub/packagesuppliers/fallback.d b/source/dub/packagesuppliers/fallback.d index 1103e37..b9235c7 100644 --- a/source/dub/packagesuppliers/fallback.d +++ b/source/dub/packagesuppliers/fallback.d @@ -29,8 +29,8 @@ // Workaround https://issues.dlang.org/show_bug.cgi?id=2525 abstract override Version[] getVersions(string package_id); - abstract override void fetchPackage(NativePath path, string package_id, Dependency dep, bool pre_release); - abstract override Json fetchPackageRecipe(string package_id, Dependency dep, bool pre_release); + abstract override void fetchPackage(NativePath path, string package_id, in VersionRange dep, bool pre_release); + abstract override Json fetchPackageRecipe(string package_id, in VersionRange dep, bool pre_release); abstract override SearchResult[] searchPackages(string query); } diff --git a/source/dub/packagesuppliers/filesystem.d b/source/dub/packagesuppliers/filesystem.d index fcb9efd..4af88c4 100644 --- a/source/dub/packagesuppliers/filesystem.d +++ b/source/dub/packagesuppliers/filesystem.d @@ -39,7 +39,7 @@ return ret; } - void fetchPackage(NativePath path, string packageId, Dependency dep, bool pre_release) + void fetchPackage(NativePath path, string packageId, in VersionRange dep, bool pre_release) { import dub.internal.vibecompat.core.file : copyFile, existsFile; enforce(path.absolute); @@ -49,7 +49,7 @@ copyFile(filename, path); } - Json fetchPackageRecipe(string packageId, Dependency dep, bool pre_release) + Json fetchPackageRecipe(string packageId, in VersionRange dep, bool pre_release) { import std.array : split; import std.path : stripExtension; @@ -76,7 +76,7 @@ return null; } - private NativePath bestPackageFile(string packageId, Dependency dep, bool pre_release) + private NativePath bestPackageFile(string packageId, in VersionRange dep, bool pre_release) { import std.algorithm.iteration : filter; import std.array : array; diff --git a/source/dub/packagesuppliers/maven.d b/source/dub/packagesuppliers/maven.d index 7673b2e..ecb29b1 100644 --- a/source/dub/packagesuppliers/maven.d +++ b/source/dub/packagesuppliers/maven.d @@ -47,7 +47,7 @@ return ret; } - void fetchPackage(NativePath path, string packageId, Dependency dep, bool pre_release) + void fetchPackage(NativePath path, string packageId, in VersionRange dep, bool pre_release) { import std.format : format; auto md = getMetadata(packageId); @@ -71,7 +71,7 @@ throw new Exception("Failed to download package %s from %s".format(packageId, url)); } - Json fetchPackageRecipe(string packageId, Dependency dep, bool pre_release) + Json fetchPackageRecipe(string packageId, in VersionRange dep, bool pre_release) { auto md = getMetadata(packageId); return getBestPackage(md, packageId, dep, pre_release); @@ -125,7 +125,7 @@ auto md = getMetadata(query); if (md.type == Json.Type.null_) return null; - auto json = getBestPackage(md, query, Dependency.any, true); + auto json = getBestPackage(md, query, VersionRange.Any, true); return [SearchResult(json["name"].opt!string, "", json["version"].opt!string)]; } } diff --git a/source/dub/packagesuppliers/packagesupplier.d b/source/dub/packagesuppliers/packagesupplier.d index c0a75d5..71f8b8d 100644 --- a/source/dub/packagesuppliers/packagesupplier.d +++ b/source/dub/packagesuppliers/packagesupplier.d @@ -1,6 +1,7 @@ module dub.packagesuppliers.packagesupplier; -public import dub.dependency : Dependency, Version; +public import dub.dependency : Dependency, Version, VersionRange; +import dub.dependency : visit; public import dub.internal.vibecompat.core.file : NativePath; public import dub.internal.vibecompat.data.json : Json; @@ -33,7 +34,19 @@ pre_release = If true, matches the latest pre-release version. Otherwise prefers stable versions. */ - void fetchPackage(NativePath path, string package_id, Dependency dep, bool pre_release); + void fetchPackage(NativePath path, string package_id, in VersionRange dep, bool pre_release); + + deprecated("Use the overload that accepts a `VersionRange` instead") + final void fetchPackage(NativePath path, string package_id, Dependency dep, bool pre_release) + { + return dep.visit!( + (const VersionRange rng) { + return this.fetchPackage(path, package_id, rng, pre_release); + }, (any) { + assert(0, "Trying to fetch a package with a non-version dependency: " ~ any.toString()); + }, + ); + } /** Retrieves only the recipe of a particular package. @@ -43,7 +56,19 @@ pre_release = If true, matches the latest pre-release version. Otherwise prefers stable versions. */ - Json fetchPackageRecipe(string package_id, Dependency dep, bool pre_release); + Json fetchPackageRecipe(string package_id, in VersionRange dep, bool pre_release); + + deprecated("Use the overload that accepts a `VersionRange` instead") + final Json fetchPackageRecipe(string package_id, Dependency dep, bool pre_release) + { + return dep.visit!( + (const VersionRange rng) { + return this.fetchPackageRecipe(package_id, rng, pre_release); + }, (any) { + return Json.init; + }, + ); + } /** Searches for packages matching the given search query term. @@ -59,7 +84,7 @@ // a package recipe instead of one (first get version list, then the // package recipe) -package Json getBestPackage(Json metadata, string packageId, Dependency dep, bool pre_release) +package Json getBestPackage(Json metadata, string packageId, in VersionRange dep, bool pre_release) { import std.exception : enforce; if (metadata.type == Json.Type.null_) diff --git a/source/dub/packagesuppliers/registry.d b/source/dub/packagesuppliers/registry.d index a5afa64..b509970 100644 --- a/source/dub/packagesuppliers/registry.d +++ b/source/dub/packagesuppliers/registry.d @@ -1,5 +1,6 @@ module dub.packagesuppliers.registry; +import dub.dependency; import dub.packagesuppliers.packagesupplier; package enum PackagesPath = "packages"; @@ -48,7 +49,7 @@ return ret; } - auto genPackageDownloadUrl(string packageId, Dependency dep, bool pre_release) + auto genPackageDownloadUrl(string packageId, in VersionRange dep, bool pre_release) { import std.array : replace; import std.format : format; @@ -64,7 +65,7 @@ return ret; } - void fetchPackage(NativePath path, string packageId, Dependency dep, bool pre_release) + void fetchPackage(NativePath path, string packageId, in VersionRange dep, bool pre_release) { import std.format : format; auto url = genPackageDownloadUrl(packageId, dep, pre_release); @@ -84,7 +85,7 @@ throw new Exception("Failed to download package %s from %s".format(packageId, url)); } - Json fetchPackageRecipe(string packageId, Dependency dep, bool pre_release) + Json fetchPackageRecipe(string packageId, in VersionRange dep, bool pre_release) { auto md = getMetadata(packageId); return getBestPackage(md, packageId, dep, pre_release);