mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Fix platform installer if platform is already installed
This commit is contained in:
@ -106,7 +106,7 @@ class PackageManager(object):
|
||||
return pkg_dir
|
||||
|
||||
@staticmethod
|
||||
def max_satisfying_version(versions, requirements=None):
|
||||
def max_satisfying_repo_version(versions, requirements=None):
|
||||
item = None
|
||||
systype = util.get_systype()
|
||||
if requirements is not None:
|
||||
@ -124,6 +124,19 @@ class PackageManager(object):
|
||||
item = v
|
||||
return item
|
||||
|
||||
def max_satisfying_version(self, name, requirements=None):
|
||||
best = None
|
||||
for manifest in self.get_installed():
|
||||
if manifest['name'] != name:
|
||||
continue
|
||||
elif requirements and not semantic_version.match(
|
||||
requirements, manifest['version']):
|
||||
continue
|
||||
elif (not best or semantic_version.compare(
|
||||
manifest['version'], best['version']) == 1):
|
||||
best = manifest
|
||||
return best
|
||||
|
||||
def get_installed(self):
|
||||
if self.package_dir in PackageManager._INSTALLED_CACHE:
|
||||
return PackageManager._INSTALLED_CACHE[self.package_dir]
|
||||
@ -153,7 +166,7 @@ class PackageManager(object):
|
||||
|
||||
def get_latest_version(self, name, requirements):
|
||||
for versions in PackageRepoIterator(name, self.repositories):
|
||||
pkgdata = self.max_satisfying_version(versions, requirements)
|
||||
pkgdata = self.max_satisfying_repo_version(versions, requirements)
|
||||
if pkgdata:
|
||||
return pkgdata['version']
|
||||
return None
|
||||
@ -168,7 +181,8 @@ class PackageManager(object):
|
||||
if installed:
|
||||
if not silent:
|
||||
click.secho("Already installed", fg="yellow")
|
||||
return
|
||||
return self.max_satisfying_version(
|
||||
name, requirements).get("_manifest_path")
|
||||
|
||||
manifest_path = None
|
||||
if name.startswith("file://"):
|
||||
@ -192,7 +206,7 @@ class PackageManager(object):
|
||||
versions = None
|
||||
for versions in PackageRepoIterator(name, self.repositories):
|
||||
dlpath = None
|
||||
pkgdata = self.max_satisfying_version(versions, requirements)
|
||||
pkgdata = self.max_satisfying_repo_version(versions, requirements)
|
||||
if not pkgdata:
|
||||
continue
|
||||
|
||||
|
@ -40,19 +40,6 @@ class PlatformManager(PackageManager):
|
||||
def get_manifest_name():
|
||||
return "platform.json"
|
||||
|
||||
def find_best_platform(self, name, requirements=None):
|
||||
best = None
|
||||
for manifest in self.get_installed():
|
||||
if manifest['name'] != name:
|
||||
continue
|
||||
elif requirements and not semantic_version.match(
|
||||
requirements, manifest['version']):
|
||||
continue
|
||||
elif (not best or semantic_version.compare(
|
||||
manifest['version'], best['version']) == 1):
|
||||
best = manifest
|
||||
return best
|
||||
|
||||
def install(self, # pylint: disable=too-many-arguments,arguments-differ
|
||||
name, requirements=None, with_packages=None,
|
||||
without_packages=None, skip_default_packages=False):
|
||||
@ -122,7 +109,7 @@ class PlatformFactory(object):
|
||||
platform_dir = dirname(name)
|
||||
name = util.load_json(name)['name']
|
||||
else:
|
||||
_manifest = PlatformManager().find_best_platform(
|
||||
_manifest = PlatformManager().max_satisfying_version(
|
||||
name, requirements)
|
||||
if _manifest:
|
||||
platform_dir = dirname(_manifest['_manifest_path'])
|
||||
|
Reference in New Issue
Block a user