Skip to content

Commit

Permalink
PackageManager.getBestPackage: Only accept Version[Range], not `Dep…
Browse files Browse the repository at this point in the history
…endency`
  • Loading branch information
Geod24 committed Aug 8, 2022
1 parent 1d50b9c commit 4888a1e
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 23 deletions.
4 changes: 2 additions & 2 deletions source/dub/commandline.d
Original file line number Diff line number Diff line change
Expand Up @@ -1116,8 +1116,8 @@ abstract class PackageBuildCommand : Command {

enforce(package_name.length, "No valid root package found - aborting.");

auto pack = dub.packageManager.getBestPackage(
package_name, ver.length ? Dependency(ver) : Dependency.any);
const vers = ver.length ? VersionRange.fromString(ver) : VersionRange.Any;
auto pack = dub.packageManager.getBestPackage(package_name, vers);

enforce(pack, format!"Failed to find a package named '%s%s' locally."(package_name,
ver == "" ? "" : ("@" ~ ver)
Expand Down
19 changes: 11 additions & 8 deletions source/dub/dub.d
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ class Dub {

auto tool = "dscanner";

auto tool_pack = m_packageManager.getBestPackage(tool, ">=0.0.0");
auto tool_pack = m_packageManager.getBestPackage(tool);
if (!tool_pack) tool_pack = m_packageManager.getBestPackage(tool, "~master");
if (!tool_pack) {
logInfo("Hint", Color.light_blue, "%s is not present, getting and storing it user wide", tool);
Expand Down Expand Up @@ -1155,7 +1155,7 @@ class Dub {
private void runCustomInitialization(NativePath path, string type, string[] runArgs)
{
string packageName = type;
auto template_pack = m_packageManager.getBestPackage(packageName, ">=0.0.0");
auto template_pack = m_packageManager.getBestPackage(packageName);
if (!template_pack) template_pack = m_packageManager.getBestPackage(packageName, "~master");
if (!template_pack) {
logInfo("%s is not present, getting and storing it user wide", packageName);
Expand Down Expand Up @@ -1223,7 +1223,7 @@ class Dub {
auto tool = m_project.rootPackage.recipe.ddoxTool;
if (tool.empty) tool = "ddox";

auto tool_pack = m_packageManager.getBestPackage(tool, ">=0.0.0");
auto tool_pack = m_packageManager.getBestPackage(tool);
if (!tool_pack) tool_pack = m_packageManager.getBestPackage(tool, "~master");
if (!tool_pack) {
logInfo("%s is not present, getting and storing it user wide", tool);
Expand Down Expand Up @@ -1666,10 +1666,13 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
logDiagnostic("Sub package %s doesn't exist in %s %s.", name, basename, dep.version_);
return null;
}
} else if (auto ret = m_dub.m_packageManager.getBestPackage(name, dep)) {
return ret;
} else {
logDiagnostic("External sub package %s %s not found.", name, dep.version_);
auto ret = dep.visit!(
(VersionRange rng) => m_dub.m_packageManager.getBestPackage(name, rng),
(any) => assert(0, "Cannot call getPackageRaw with a non-version dependency on subpackages"),
);
if (ret is null)
logDiagnostic("External sub package %s %s not found.", name, dep.version_);
return null;
}
}
Expand All @@ -1692,7 +1695,7 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
}
const vers = dep.version_;

if (auto ret = m_dub.m_packageManager.getBestPackage(name, dep))
if (auto ret = m_dub.m_packageManager.getBestPackage(name, vers))
return ret;

auto key = name ~ ":" ~ vers.toString();
Expand Down Expand Up @@ -1722,7 +1725,7 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
FetchOptions fetchOpts;
fetchOpts |= prerelease ? FetchOptions.usePrerelease : FetchOptions.none;
m_dub.fetch(rootpack, vers, m_dub.defaultPlacementLocation, fetchOpts, "need sub package description");
auto ret = m_dub.m_packageManager.getBestPackage(name, dep);
auto ret = m_dub.m_packageManager.getBestPackage(name, vers);
if (!ret) {
logWarn("Package %s %s doesn't have a sub package %s", rootpack, dep.version_, name);
return null;
Expand Down
21 changes: 19 additions & 2 deletions source/dub/packagemanager.d
Original file line number Diff line number Diff line change
Expand Up @@ -355,12 +355,29 @@ class PackageManager {

/** Searches for the latest version of a package matching the given dependency.
*/
deprecated("Use the overload that accepts a `VersionRange` as second argument")
Package getBestPackage(string name, Dependency version_spec, bool enable_overrides = true)
{
return version_spec.visit!(
(VersionRange range) => this.getBestPackage(name, range, enable_overrides),
(any) => this.getBestPackage(name, VersionRange.Any, enable_overrides),
);
}

/// Ditto
Package getBestPackage(string name, Version vers)
{
return this.getBestPackage(name, VersionRange(vers, vers));
}

/// Ditto
Package getBestPackage(string name, VersionRange spec = VersionRange.Any, bool enable_overrides = true)
{
Package ret;
foreach (p; getPackageIterator(name)) {
auto vmm = isManagedPackage(p) ? VersionMatchMode.strict : VersionMatchMode.standard;
if (version_spec.matches(p.version_, vmm) && (!ret || p.version_ > ret.version_))
const vers = p.version_;
if (spec.matches(vers, vmm) && (!ret || vers > ret.version_))
ret = p;
}

Expand All @@ -374,7 +391,7 @@ class PackageManager {
/// ditto
Package getBestPackage(string name, string version_spec)
{
return getBestPackage(name, Dependency(version_spec));
return getBestPackage(name, VersionRange.fromString(version_spec));
}

/** Gets the a specific sub package.
Expand Down
25 changes: 14 additions & 11 deletions source/dub/project.d
Original file line number Diff line number Diff line change
Expand Up @@ -510,17 +510,20 @@ shared static this() {
}
} else if (m_selections.hasSelectedVersion(basename)) {
vspec = m_selections.getSelectedVersion(basename);
if (!vspec.path.empty) {
auto path = vspec.path;
if (!path.absolute) path = m_rootPackage.path ~ path;
p = m_packageManager.getOrLoadPackage(path, NativePath.init, true);
p = resolveSubPackage(p, subname, true);
} else if (!vspec.repository.empty) {
p = m_packageManager.loadSCMPackage(basename, vspec.repository);
p = resolveSubPackage(p, subname, true);
} else {
p = m_packageManager.getBestPackage(dep.name, vspec);
}
p = vspec.visit!(
(NativePath path_) {
auto path = path_.absolute ? path_ : m_rootPackage.path ~ path_;
auto tmp = m_packageManager.getOrLoadPackage(path, NativePath.init, true);
return resolveSubPackage(tmp, subname, true);
},
(Repository repo) {
auto tmp = m_packageManager.loadSCMPackage(basename, repo);
return resolveSubPackage(tmp, subname, true);
},
(VersionRange range) {
return m_packageManager.getBestPackage(dep.name, range);
},
);
} else if (m_dependencies.canFind!(d => getBasePackageName(d.name) == basename)) {
auto idx = m_dependencies.countUntil!(d => getBasePackageName(d.name) == basename);
auto bp = m_dependencies[idx].basePackage;
Expand Down

0 comments on commit 4888a1e

Please sign in to comment.