Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions source/dub/dub.d
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,9 @@ class Dub {
foreach (p; m_project.selections.selectedPackages) {
auto dep = m_project.selections.getSelectedVersion(p);
if (!dep.path.empty) {
try if (m_packageManager.getOrLoadPackage(dep.path)) continue;
auto path = dep.path;
if (!path.absolute) path = this.rootPath ~ path;
try if (m_packageManager.getOrLoadPackage(path)) continue;
catch (Exception e) { logDebug("Failed to load path based selection: %s", e.toString().sanitize); }
} else {
if (m_packageManager.getPackage(p, dep.version_)) continue;
Expand Down Expand Up @@ -288,7 +290,8 @@ class Dub {
return;
}

foreach (p, ver; versions) {
foreach (p; versions.byKey) {
auto ver = versions[p]; // Workaround for DMD 2.070.0 AA issue (crashes in aaApply2 if iterating by key+value)
assert(!p.canFind(":"), "Resolved packages contain a sub package!?: "~p);
Package pack;
if (!ver.path.empty) {
Expand Down
54 changes: 26 additions & 28 deletions source/dub/project.d
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,32 @@ class Project {
foreach (name, vspec_; pack.dependencies) {
Dependency vspec = vspec_;
Package p;
if (!vspec.path.empty) {

auto basename = getBasePackageName(name);
if (name == m_rootPackage.basePackage.name) {
vspec = Dependency(m_rootPackage.ver);
p = m_rootPackage.basePackage;
} else if (basename == m_rootPackage.basePackage.name) {
vspec = Dependency(m_rootPackage.ver);
try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, getSubPackageName(name), false);
catch (Exception e) {
logDiagnostic("Error getting sub package %s: %s", name, e.msg);
continue;
}
} else if (m_selections.hasSelectedVersion(basename)) {
vspec = m_selections.getSelectedVersion(basename);
p = m_packageManager.getBestPackage(name, vspec);
} 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;
vspec = Dependency(bp.path);
p = m_packageManager.getSubPackage(bp, getSubPackageName(name), false);
} else {
logDiagnostic("Version selection for dependency %s (%s) of %s is missing.",
basename, name, pack.name);
}

if (!p && !vspec.path.empty) {
Path path = vspec.path;
if (!path.absolute) path = pack.path ~ path;
logDiagnostic("Adding local %s", path);
Expand All @@ -252,33 +277,6 @@ class Project {
path.toNativeString(), name, p.name));
}

if (!p) {
auto basename = getBasePackageName(name);
if (name == m_rootPackage.basePackage.name) {
vspec = Dependency(m_rootPackage.ver);
p = m_rootPackage.basePackage;
} else if (basename == m_rootPackage.basePackage.name) {
vspec = Dependency(m_rootPackage.ver);
try p = m_packageManager.getSubPackage(m_rootPackage.basePackage, getSubPackageName(name), false);
catch (Exception e) {
logDiagnostic("Error getting sub package %s: %s", name, e.msg);
continue;
}
} else if (m_selections.hasSelectedVersion(basename)) {
vspec = m_selections.getSelectedVersion(basename);
p = m_packageManager.getBestPackage(name, vspec);
} 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;
vspec = Dependency(bp.path);
p = m_packageManager.getSubPackage(bp, getSubPackageName(name), false);
} else {
logDiagnostic("Version selection for dependency %s (%s) of %s is missing.",
basename, name, pack.name);
continue;
}
}

if (!p) {
logDiagnostic("Missing dependency %s %s of %s", name, vspec, pack.name);
continue;
Expand Down
2 changes: 2 additions & 0 deletions test/issue754-path-selection-fail/a-1.0/dub.sdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name "a"
version "1.0.0"
3 changes: 3 additions & 0 deletions test/issue754-path-selection-fail/a-1.0/source/a.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module a;

void test() {}
3 changes: 3 additions & 0 deletions test/issue754-path-selection-fail/a-2.0/dub.sdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name "a"
version "2.0.0"

2 changes: 2 additions & 0 deletions test/issue754-path-selection-fail/dub.sdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name "test"
dependency "a" path="a-2.0"
6 changes: 6 additions & 0 deletions test/issue754-path-selection-fail/dub.selections.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"fileVersion": 1,
"versions": {
"a": {"path": "a-1.0"}
}
}
6 changes: 6 additions & 0 deletions test/issue754-path-selection-fail/source/app.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import a;

void main()
{
test();
}