diff --git a/source/dub/dub.d b/source/dub/dub.d index 0bc56eb..65840c9 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -532,7 +532,7 @@ foreach (ps; m_packageSuppliers) { try { auto versions = ps.getVersions(p); - if (versions.canFind!(v => dep.matches(v))) + if (versions.canFind!(v => dep.matches(v, VersionMatchMode.strict))) continue next_pack; } catch (Exception e) { logWarn("Error querying versions for %s, %s: %s", p, ps.description, e.msg); @@ -592,7 +592,8 @@ } else if (!ver.repository.empty) { pack = m_packageManager.loadSCMPackage(p, ver); } else { - pack = m_packageManager.getBestPackage(p, ver); + assert(ver.isExactVersion, "Resolved dependency is neither path, nor repository, nor exact version based!?"); + pack = m_packageManager.getPackage(p, ver.version_); if (pack && m_packageManager.isManagedPackage(pack) && ver.version_.isBranch && (options & UpgradeOptions.upgrade) != 0) { diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index fdcfa4b..af16b89 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -188,9 +188,11 @@ /// ditto Package getPackage(string name, Version ver, NativePath path) { - foreach (p; getPackageIterator(name)) - if (p.version_ == ver && p.path.startsWith(path)) + foreach (p; getPackageIterator(name)) { + auto pvm = isManagedPackage(p) ? VersionMatchMode.strict : VersionMatchMode.standard; + if (p.version_.matches(ver, pvm) && p.path.startsWith(path)) return p; + } return null; }