Skip to content

Commit b503a80

Browse files
authored
Deprecate PackageManager.loadSCMPackage & other Dependency-related refactoring (dlang#2312)
* Trivial: Take a nested function out of a foreach loop * Deprecate PackageManager.loadSCMPackage's Dependency overload, use Repository We're moving away from using `Dependency.m_range` to store the git ref, and the `Repository` type has already been updated to include the information, but some places still read it from `m_range`, including this one. * Trivial: Forward Dependency's string ctor to VersionRange ctor * Trivial: Simplify comparison with `VersionRange.Invalid` within `VersionRange`
1 parent 1f1d30d commit b503a80

File tree

4 files changed

+26
-19
lines changed

4 files changed

+26
-19
lines changed

source/dub/dependency.d

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ struct Dependency {
6969
*/
7070
this(string spec)
7171
{
72-
this.m_range = VersionRange.fromString(spec);
72+
this(VersionRange.fromString(spec));
7373
}
7474

7575
/** Constructs a new dependency specification that matches a specific
@@ -982,7 +982,7 @@ private struct VersionRange
982982

983983
string r;
984984

985-
if (this == Dependency.invalid.m_range) return "invalid";
985+
if (this == Invalid) return "invalid";
986986
if (this.isExactVersion() && m_inclusiveA && m_inclusiveB) {
987987
// Special "==" case
988988
if (m_versA == Version.masterBranch) return "~master";

source/dub/dub.d

+3-3
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ class Dub {
528528
try if (m_packageManager.getOrLoadPackage(path)) continue;
529529
catch (Exception e) { logDebug("Failed to load path based selection: %s", e.toString().sanitize); }
530530
} else if (!dep.repository.empty) {
531-
if (m_packageManager.loadSCMPackage(getBasePackageName(p), dep))
531+
if (m_packageManager.loadSCMPackage(getBasePackageName(p), dep.repository))
532532
continue;
533533
} else {
534534
if (m_packageManager.getPackage(p, dep.version_)) continue;
@@ -591,7 +591,7 @@ class Dub {
591591
continue;
592592
}
593593
} else if (!ver.repository.empty) {
594-
pack = m_packageManager.loadSCMPackage(p, ver);
594+
pack = m_packageManager.loadSCMPackage(p, ver.repository);
595595
} else {
596596
assert(ver.isExactVersion, "Resolved dependency is neither path, nor repository, nor exact version based!?");
597597
pack = m_packageManager.getPackage(p, ver.version_);
@@ -1718,7 +1718,7 @@ private class DependencyVersionResolver : DependencyResolver!(Dependency, Depend
17181718
return m_rootPackage.basePackage;
17191719

17201720
if (!dep.repository.empty) {
1721-
auto ret = m_dub.packageManager.loadSCMPackage(name, dep);
1721+
auto ret = m_dub.packageManager.loadSCMPackage(name, dep.repository);
17221722
return ret !is null && dep.matches(ret.version_) ? ret : null;
17231723
} else if (!dep.path.empty) {
17241724
try {

source/dub/packagemanager.d

+10-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
module dub.packagemanager;
99

1010
import dub.dependency;
11+
static import dub.dependency;
1112
import dub.internal.utils;
1213
import dub.internal.vibecompat.core.file;
1314
import dub.internal.vibecompat.core.log;
@@ -273,15 +274,21 @@ class PackageManager {
273274
The package loaded from the given SCM repository or null if the
274275
package couldn't be loaded.
275276
*/
277+
deprecated("Use the overload that accepts a `dub.dependency : Repository`")
276278
Package loadSCMPackage(string name, Dependency dependency)
277279
in { assert(!dependency.repository.empty); }
280+
do { return this.loadSCMPackage(name, dependency.repository); }
281+
282+
/// Ditto
283+
Package loadSCMPackage(string name, dub.dependency.Repository repo)
284+
in { assert(!repo.empty); }
278285
do {
279286
Package pack;
280287

281-
with (dependency.repository) final switch (kind)
288+
final switch (repo.kind)
282289
{
283-
case Kind.git:
284-
pack = loadGitPackage(name, dependency.versionSpec, dependency.repository.remote);
290+
case repo.Kind.git:
291+
pack = loadGitPackage(name, repo.ref_, repo.remote);
285292
}
286293
if (pack !is null) {
287294
addPackages(m_temporaryPackages, pack);

source/dub/project.d

+11-11
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,10 @@ shared static this() {
473473
m_missingDependencies = [];
474474
m_packageManager.refresh(false);
475475

476+
Package resolveSubPackage(Package p, string subname, bool silentFail) {
477+
return subname.length ? m_packageManager.getSubPackage(p, subname, silentFail) : p;
478+
}
479+
476480
void collectDependenciesRec(Package pack, int depth = 0)
477481
{
478482
auto indent = replicate(" ", depth);
@@ -490,10 +494,6 @@ shared static this() {
490494
// need to be satisfied
491495
bool is_desired = !vspec.optional || m_selections.hasSelectedVersion(basename) || (vspec.default_ && m_selections.bare);
492496

493-
Package resolveSubPackage(Package p, in bool silentFail) {
494-
return subname.length ? m_packageManager.getSubPackage(p, subname, silentFail) : p;
495-
}
496-
497497
if (dep.name == m_rootPackage.basePackage.name) {
498498
vspec = Dependency(m_rootPackage.version_);
499499
p = m_rootPackage.basePackage;
@@ -511,26 +511,26 @@ shared static this() {
511511
auto path = vspec.path;
512512
if (!path.absolute) path = m_rootPackage.path ~ path;
513513
p = m_packageManager.getOrLoadPackage(path, NativePath.init, true);
514-
p = resolveSubPackage(p, true);
514+
p = resolveSubPackage(p, subname, true);
515515
} else if (!vspec.repository.empty) {
516-
p = m_packageManager.loadSCMPackage(basename, vspec);
517-
p = resolveSubPackage(p, true);
516+
p = m_packageManager.loadSCMPackage(basename, vspec.repository);
517+
p = resolveSubPackage(p, subname, true);
518518
} else {
519519
p = m_packageManager.getBestPackage(dep.name, vspec);
520520
}
521521
} else if (m_dependencies.canFind!(d => getBasePackageName(d.name) == basename)) {
522522
auto idx = m_dependencies.countUntil!(d => getBasePackageName(d.name) == basename);
523523
auto bp = m_dependencies[idx].basePackage;
524524
vspec = Dependency(bp.path);
525-
p = resolveSubPackage(bp, false);
525+
p = resolveSubPackage(bp, subname, false);
526526
} else {
527527
logDiagnostic("%sVersion selection for dependency %s (%s) of %s is missing.",
528528
indent, basename, dep.name, pack.name);
529529
}
530530

531531
if (!p && !vspec.repository.empty) {
532-
p = m_packageManager.loadSCMPackage(basename, vspec);
533-
resolveSubPackage(p, false);
532+
p = m_packageManager.loadSCMPackage(basename, vspec.repository);
533+
resolveSubPackage(p, subname, false);
534534
}
535535

536536
if (!p && !vspec.path.empty && is_desired) {
@@ -542,7 +542,7 @@ shared static this() {
542542
logWarn("%sSub package %s must be referenced using the path to it's parent package.", indent, dep.name);
543543
p = p.parentPackage;
544544
}
545-
p = resolveSubPackage(p, false);
545+
p = resolveSubPackage(p, subname, false);
546546
enforce(p.name == dep.name,
547547
format("Path based dependency %s is referenced with a wrong name: %s vs. %s",
548548
path.toNativeString(), dep.name, p.name));

0 commit comments

Comments
 (0)