Skip to content

Commit 06ef374

Browse files
Geod24WebFreak001
authored andcommitted
Dub.fetch: Deprecate Dependency overload, only accept Version[range]
Because fetching a path-based or repository dependency doesn't make much sense.
1 parent 4050e1c commit 06ef374

File tree

2 files changed

+36
-18
lines changed

2 files changed

+36
-18
lines changed

source/dub/commandline.d

+7-7
Original file line numberDiff line numberDiff line change
@@ -1282,11 +1282,11 @@ class BuildCommand : GenerateCommand {
12821282
}
12831283
}
12841284

1285-
Dependency dep;
1285+
VersionRange dep;
12861286

12871287
if (packageParts.version_.length > 0) {
12881288
// the user provided a version manually
1289-
dep = Dependency(packageParts.version_);
1289+
dep = VersionRange.fromString(packageParts.version_);
12901290
} else {
12911291
if (packageParts.name.startsWith(":") ||
12921292
dub.packageManager.getFirstPackage(packageParts.name))
@@ -1313,7 +1313,7 @@ class BuildCommand : GenerateCommand {
13131313
const answer = m_yes ? true : input("Do you want to fetch '%s' now?".format(packageParts.name));
13141314
if (!answer)
13151315
return 0;
1316-
dep = Dependency(p.version_);
1316+
dep = VersionRange.fromString(p.version_);
13171317
}
13181318

13191319
dub.fetch(packageParts.name, dep, dub.defaultPlacementLocation, FetchOptions.none);
@@ -1903,13 +1903,13 @@ class FetchCommand : FetchRemoveCommand {
19031903
if (m_version.length) { // remove then --version removed
19041904
enforceUsage(!name.canFindVersionSplitter, "Double version spec not allowed.");
19051905
logWarn("The '--version' parameter was deprecated, use %s@%s. Please update your scripts.", name, m_version);
1906-
dub.fetch(name, Dependency(m_version), location, fetchOpts);
1906+
dub.fetch(name, VersionRange.fromString(m_version), location, fetchOpts);
19071907
} else if (name.canFindVersionSplitter) {
19081908
const parts = name.splitPackageName;
1909-
dub.fetch(parts.name, Dependency(parts.version_), location, fetchOpts);
1909+
dub.fetch(parts.name, VersionRange.fromString(parts.version_), location, fetchOpts);
19101910
} else {
19111911
try {
1912-
dub.fetch(name, Dependency.any, location, fetchOpts);
1912+
dub.fetch(name, VersionRange.Any, location, fetchOpts);
19131913
logInfo("Finished", Color.green, "%s fetched", name.color(Mode.bold));
19141914
logInfo(
19151915
"Please note that you need to use `dub run <pkgname>` " ~
@@ -1919,7 +1919,7 @@ class FetchCommand : FetchRemoveCommand {
19191919
catch(Exception e){
19201920
logInfo("Getting a release version failed: %s", e.msg);
19211921
logInfo("Retry with ~master...");
1922-
dub.fetch(name, Dependency("~master"), location, fetchOpts);
1922+
dub.fetch(name, VersionRange.fromString("~master"), location, fetchOpts);
19231923
}
19241924
}
19251925
return 0;

source/dub/dub.d

+29-11
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ class Dub {
586586

587587
FetchOptions fetchOpts;
588588
fetchOpts |= (options & UpgradeOptions.preRelease) != 0 ? FetchOptions.usePrerelease : FetchOptions.none;
589-
if (!pack) fetch(p, ver, defaultPlacementLocation, fetchOpts, "getting selected version");
589+
if (!pack) fetch(p, ver.version_, defaultPlacementLocation, fetchOpts, "getting selected version");
590590
if ((options & UpgradeOptions.select) && p != m_project.rootPackage.name) {
591591
if (!ver.repository.empty) {
592592
m_project.selections.selectVersion(p, ver.repository);
@@ -664,7 +664,7 @@ class Dub {
664664
if (!tool_pack) tool_pack = m_packageManager.getBestPackage(tool, "~master");
665665
if (!tool_pack) {
666666
logInfo("Hint", Color.light_blue, "%s is not present, getting and storing it user wide", tool);
667-
tool_pack = fetch(tool, Dependency.any, defaultPlacementLocation, FetchOptions.none);
667+
tool_pack = fetch(tool, VersionRange.Any, defaultPlacementLocation, FetchOptions.none);
668668
}
669669

670670
auto dscanner_dub = new Dub(null, m_packageSuppliers);
@@ -738,14 +738,31 @@ class Dub {
738738
}
739739

740740
/// Fetches the package matching the dependency and places it in the specified location.
741+
deprecated("Use the overload that accepts either a `Version` or a `VersionRange` as second argument")
741742
Package fetch(string packageId, const Dependency dep, PlacementLocation location, FetchOptions options, string reason = "")
743+
{
744+
const vrange = dep.visit!(
745+
(VersionRange range) => range,
746+
(any) => throw new Exception("Cannot call `dub.fetch` with a " ~ typeof(any).stringof ~ " dependency"),
747+
);
748+
return this.fetch(packageId, vrange, location, options, reason);
749+
}
750+
751+
/// Ditto
752+
Package fetch(string packageId, in Version vers, PlacementLocation location, FetchOptions options, string reason = "")
753+
{
754+
return this.fetch(packageId, VersionRange(vers, vers), location, options, reason);
755+
}
756+
757+
/// Ditto
758+
Package fetch(string packageId, in VersionRange range, PlacementLocation location, FetchOptions options, string reason = "")
742759
{
743760
auto basePackageName = getBasePackageName(packageId);
744761
Json pinfo;
745762
PackageSupplier supplier;
746763
foreach(ps; m_packageSuppliers){
747764
try {
748-
pinfo = ps.fetchPackageRecipe(basePackageName, dep, (options & FetchOptions.usePrerelease) != 0);
765+
pinfo = ps.fetchPackageRecipe(basePackageName, Dependency(range), (options & FetchOptions.usePrerelease) != 0);
749766
if (pinfo.type == Json.Type.null_)
750767
continue;
751768
supplier = ps;
@@ -755,7 +772,7 @@ class Dub {
755772
logDebug("Full error: %s", e.toString().sanitize());
756773
}
757774
}
758-
enforce(pinfo.type != Json.Type.undefined, "No package "~packageId~" was found matching the dependency "~dep.toString());
775+
enforce(pinfo.type != Json.Type.undefined, "No package "~packageId~" was found matching the dependency " ~ range.toString());
759776
string ver = pinfo["version"].get!string;
760777

761778
NativePath placement;
@@ -813,7 +830,7 @@ class Dub {
813830
import std.zip : ZipException;
814831

815832
auto path = getTempFile(basePackageName, ".zip");
816-
supplier.fetchPackage(path, basePackageName, dep, (options & FetchOptions.usePrerelease) != 0); // Q: continue on fail?
833+
supplier.fetchPackage(path, basePackageName, Dependency(range), (options & FetchOptions.usePrerelease) != 0); // Q: continue on fail?
817834
scope(exit) std.file.remove(path.toNativeString());
818835
logDiagnostic("Placing to %s...", placement.toNativeString());
819836

@@ -1142,7 +1159,7 @@ class Dub {
11421159
if (!template_pack) template_pack = m_packageManager.getBestPackage(packageName, "~master");
11431160
if (!template_pack) {
11441161
logInfo("%s is not present, getting and storing it user wide", packageName);
1145-
template_pack = fetch(packageName, Dependency.any, defaultPlacementLocation, FetchOptions.none);
1162+
template_pack = fetch(packageName, VersionRange.Any, defaultPlacementLocation, FetchOptions.none);
11461163
}
11471164

11481165
Package initSubPackage = m_packageManager.getSubPackage(template_pack, "init-exec", false);
@@ -1210,7 +1227,7 @@ class Dub {
12101227
if (!tool_pack) tool_pack = m_packageManager.getBestPackage(tool, "~master");
12111228
if (!tool_pack) {
12121229
logInfo("%s is not present, getting and storing it user wide", tool);
1213-
tool_pack = fetch(tool, Dependency.any, defaultPlacementLocation, FetchOptions.none);
1230+
tool_pack = fetch(tool, VersionRange.Any, defaultPlacementLocation, FetchOptions.none);
12141231
}
12151232

12161233
auto ddox_dub = new Dub(null, m_packageSuppliers);
@@ -1673,11 +1690,12 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
16731690
return null;
16741691
}
16751692
}
1693+
const vers = dep.version_;
16761694

16771695
if (auto ret = m_dub.m_packageManager.getBestPackage(name, dep))
16781696
return ret;
16791697

1680-
auto key = name ~ ":" ~ dep.version_.toString();
1698+
auto key = name ~ ":" ~ vers.toString();
16811699
if (auto ret = key in m_remotePackages)
16821700
return *ret;
16831701

@@ -1695,15 +1713,15 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
16951713
m_remotePackages[key] = ret;
16961714
return ret;
16971715
} catch (Exception e) {
1698-
logDiagnostic("Metadata for %s %s could not be downloaded from %s: %s", name, dep, ps.description, e.msg);
1716+
logDiagnostic("Metadata for %s %s could not be downloaded from %s: %s", name, vers, ps.description, e.msg);
16991717
logDebug("Full error: %s", e.toString().sanitize);
17001718
}
17011719
} else {
1702-
logDiagnostic("Package %s not found in base package description (%s). Downloading whole package.", name, dep.version_.toString());
1720+
logDiagnostic("Package %s not found in base package description (%s). Downloading whole package.", name, vers.toString());
17031721
try {
17041722
FetchOptions fetchOpts;
17051723
fetchOpts |= prerelease ? FetchOptions.usePrerelease : FetchOptions.none;
1706-
m_dub.fetch(rootpack, dep, m_dub.defaultPlacementLocation, fetchOpts, "need sub package description");
1724+
m_dub.fetch(rootpack, vers, m_dub.defaultPlacementLocation, fetchOpts, "need sub package description");
17071725
auto ret = m_dub.m_packageManager.getBestPackage(name, dep);
17081726
if (!ret) {
17091727
logWarn("Package %s %s doesn't have a sub package %s", rootpack, dep.version_, name);

0 commit comments

Comments
 (0)