diff --git a/source/dub/dependency.d b/source/dub/dependency.d index 35ee162..1ccad86 100644 --- a/source/dub/dependency.d +++ b/source/dub/dependency.d @@ -192,14 +192,15 @@ static Dependency fromJson(Json verspec) { Dependency dep; if( verspec.type == Json.Type.object ){ - enforce("version" in verspec, "No version field specified!"); - auto ver = verspec["version"].get!string; if( auto pp = "path" in verspec ) { - // This enforces the "version" specifier to be a simple version, - // without additional range specifiers. - dep = Dependency(Version(ver)); + if (auto pv = "version" in verspec) + logDiagnostic("Ignoring version specification (%s) for path based dependency %s", pv.get!string, pp.get!string); + + dep = Dependency.ANY; dep.path = Path(verspec.path.get!string()); } else { + enforce("version" in verspec, "No version field specified!"); + auto ver = verspec["version"].get!string; // Using the string to be able to specifiy a range of versions. dep = Dependency(ver); } diff --git a/source/dub/dub.d b/source/dub/dub.d index 93b4644..e7b5866 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -171,7 +171,9 @@ foreach (p, ver; versions) { assert(!p.canFind(":"), "Resolved packages contain a sub package!?: "~p); - auto pack = m_packageManager.getBestPackage(p, ver); + Package pack; + if (!ver.path.empty) pack = m_packageManager.getTemporaryPackage(ver.path); + else pack = m_packageManager.getBestPackage(p, ver); if (!pack) fetch(p, ver, PlacementLocation.userWide, false, (options & UpgradeOptions.preRelease) != 0, (options & UpgradeOptions.forceRemove) != 0, false); if ((options & UpgradeOptions.select) && ver.path.empty) m_project.selections.selectVersion(p, ver.version_); diff --git a/source/dub/project.d b/source/dub/project.d index 667b346..4e3d938 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -202,8 +202,9 @@ if (!vspec.path.empty) { Path path = vspec.path; if (!path.absolute) path = pack.path ~ path; - logDiagnostic("Adding local %s %s", path, vspec.version_); - p = m_packageManager.getTemporaryPackage(path, vspec.version_); + logDiagnostic("Adding local %s", path); + p = m_packageManager.getTemporaryPackage(path); + enforce(p.name == name, format("Path based dependency %s is referenced with a wrong name: %s vs. %s", path.toNativeString(), name, p.name)); } if (!p) {