Check ALL possible version for the first matched package

This commit is contained in:
Ivan Kravets
2020-08-23 15:25:03 +03:00
parent 620241e067
commit 1c8aca2f6a

View File

@ -19,7 +19,8 @@ import click
from platformio.clients.http import HTTPClient from platformio.clients.http import HTTPClient
from platformio.clients.registry import RegistryClient from platformio.clients.registry import RegistryClient
from platformio.package.exception import UnknownPackageError from platformio.package.exception import UnknownPackageError
from platformio.package.meta import PackageMetaData, PackageSpec from platformio.package.meta import PackageSpec
from platformio.package.version import cast_version_to_semver
try: try:
from urllib.parse import urlparse from urllib.parse import urlparse
@ -185,17 +186,13 @@ class PackageManageRegistryMixin(object):
) )
def find_best_registry_version(self, packages, spec): def find_best_registry_version(self, packages, spec):
# find compatible version within the latest package versions
for package in packages: for package in packages:
# find compatible version within the latest package versions
version = self.pick_best_registry_version([package["version"]], spec) version = self.pick_best_registry_version([package["version"]], spec)
if version: if version:
return (package, version) return (package, version)
if not spec.requirements: # if the custom version requirements, check ALL package versions
return (None, None)
# if the custom version requirements, check ALL package versions
for package in packages:
version = self.pick_best_registry_version( version = self.pick_best_registry_version(
self.fetch_registry_package( self.fetch_registry_package(
PackageSpec( PackageSpec(
@ -215,14 +212,14 @@ class PackageManageRegistryMixin(object):
assert not spec or isinstance(spec, PackageSpec) assert not spec or isinstance(spec, PackageSpec)
best = None best = None
for version in versions: for version in versions:
semver = PackageMetaData.to_semver(version["name"]) semver = cast_version_to_semver(version["name"])
if spec and spec.requirements and semver not in spec.requirements: if spec and spec.requirements and semver not in spec.requirements:
continue continue
if not any( if not any(
self.is_system_compatible(f.get("system")) for f in version["files"] self.is_system_compatible(f.get("system")) for f in version["files"]
): ):
continue continue
if not best or (semver > PackageMetaData.to_semver(best["name"])): if not best or (semver > cast_version_to_semver(best["name"])):
best = version best = version
return best return best