diff --git a/source/dub/packagemanager.d b/source/dub/packagemanager.d index a33a588..5eadc30 100644 --- a/source/dub/packagemanager.d +++ b/source/dub/packagemanager.d @@ -192,7 +192,7 @@ if (!this.m_initialized) this.refresh(); - if (auto pkg = this.m_internal.lookup(name, vers)) + if (auto pkg = this.m_internal.lookup(name, vers, this)) return pkg; foreach (ref location; this.m_repositories) @@ -1407,19 +1407,15 @@ * Returns: * A `Package` if one was found, `null` if none exists. */ - inout(Package) lookup(string name, Version ver) inout { + inout(Package) lookup(string name, Version ver, PackageManager mgr) inout { foreach (pkg; this.localPackages) if (pkg.name == name && pkg.version_.matches(ver, VersionMatchMode.standard)) return pkg; - // Any Package under `fromPath` will be managed, unless the Location - // is `PackageManager.m_internal`. - // This is to avoid matching git versions with regular versions, - // as can be seen in #2262. - const pvm = this.packagePath !is NativePath.init - ? VersionMatchMode.strict : VersionMatchMode.standard; - foreach (pkg; this.fromPath) + foreach (pkg; this.fromPath) { + auto pvm = mgr.isManagedPackage(pkg) ? VersionMatchMode.strict : VersionMatchMode.standard; if (pkg.name == name && pkg.version_.matches(ver, pvm)) return pkg; + } return null; } @@ -1440,7 +1436,7 @@ */ Package load (string name, Version vers, PackageManager mgr) { - if (auto pkg = this.lookup(name, vers)) + if (auto pkg = this.lookup(name, vers, mgr)) return pkg; string versStr = vers.toString();