Skip to content

Commit

Permalink
Instead of overwriting project dependencies, enforce that dub.selecti…
Browse files Browse the repository at this point in the history
…ons.json specified versions actually match the dependency requirements.

For path selections, get the required version from the SCM if it's a tag.
  • Loading branch information
FeepingCreature committed Nov 22, 2019
1 parent f2e5e8d commit 515bf24
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions source/dub/project.d
Original file line number Diff line number Diff line change
Expand Up @@ -353,14 +353,20 @@ class Project {
continue;
}
} else if (m_selections.hasSelectedVersion(basename)) {
vspec = m_selections.getSelectedVersion(basename);
if (vspec.path.empty) p = m_packageManager.getBestPackage(dep.name, vspec);
auto selection = m_selections.getSelectedVersion(basename);
if (selection.path.empty) p = m_packageManager.getBestPackage(dep.name, selection);
else {
auto path = vspec.path;
auto path = selection.path;
if (!path.absolute) path = m_rootPackage.path ~ path;
p = m_packageManager.getOrLoadPackage(path, NativePath.init, true);
if (subname.length) p = m_packageManager.getSubPackage(p, subname, true);
// submodule folders checked out to a branch match any version (convenience)
if (p.version_.isBranch) selection = Dependency(m_rootPackage.path ~ selection.path);
else selection = Dependency(p.version_, m_rootPackage.path ~ selection.path);
}
vspec = vspec.merge(selection);
enforce(vspec != Dependency.invalid, format!"Selected package %s doesn't match %s(%s) of %s"(
selection, dep.name, dep.spec, pack.name));
} 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 515bf24

Please sign in to comment.