mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-31 02:27:13 +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
|
return pkg_dir
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def max_satisfying_version(versions, requirements=None):
|
def max_satisfying_repo_version(versions, requirements=None):
|
||||||
item = None
|
item = None
|
||||||
systype = util.get_systype()
|
systype = util.get_systype()
|
||||||
if requirements is not None:
|
if requirements is not None:
|
||||||
@ -124,6 +124,19 @@ class PackageManager(object):
|
|||||||
item = v
|
item = v
|
||||||
return item
|
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):
|
def get_installed(self):
|
||||||
if self.package_dir in PackageManager._INSTALLED_CACHE:
|
if self.package_dir in PackageManager._INSTALLED_CACHE:
|
||||||
return PackageManager._INSTALLED_CACHE[self.package_dir]
|
return PackageManager._INSTALLED_CACHE[self.package_dir]
|
||||||
@ -153,7 +166,7 @@ class PackageManager(object):
|
|||||||
|
|
||||||
def get_latest_version(self, name, requirements):
|
def get_latest_version(self, name, requirements):
|
||||||
for versions in PackageRepoIterator(name, self.repositories):
|
for versions in PackageRepoIterator(name, self.repositories):
|
||||||
pkgdata = self.max_satisfying_version(versions, requirements)
|
pkgdata = self.max_satisfying_repo_version(versions, requirements)
|
||||||
if pkgdata:
|
if pkgdata:
|
||||||
return pkgdata['version']
|
return pkgdata['version']
|
||||||
return None
|
return None
|
||||||
@ -168,7 +181,8 @@ class PackageManager(object):
|
|||||||
if installed:
|
if installed:
|
||||||
if not silent:
|
if not silent:
|
||||||
click.secho("Already installed", fg="yellow")
|
click.secho("Already installed", fg="yellow")
|
||||||
return
|
return self.max_satisfying_version(
|
||||||
|
name, requirements).get("_manifest_path")
|
||||||
|
|
||||||
manifest_path = None
|
manifest_path = None
|
||||||
if name.startswith("file://"):
|
if name.startswith("file://"):
|
||||||
@ -192,7 +206,7 @@ class PackageManager(object):
|
|||||||
versions = None
|
versions = None
|
||||||
for versions in PackageRepoIterator(name, self.repositories):
|
for versions in PackageRepoIterator(name, self.repositories):
|
||||||
dlpath = None
|
dlpath = None
|
||||||
pkgdata = self.max_satisfying_version(versions, requirements)
|
pkgdata = self.max_satisfying_repo_version(versions, requirements)
|
||||||
if not pkgdata:
|
if not pkgdata:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -40,19 +40,6 @@ class PlatformManager(PackageManager):
|
|||||||
def get_manifest_name():
|
def get_manifest_name():
|
||||||
return "platform.json"
|
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
|
def install(self, # pylint: disable=too-many-arguments,arguments-differ
|
||||||
name, requirements=None, with_packages=None,
|
name, requirements=None, with_packages=None,
|
||||||
without_packages=None, skip_default_packages=False):
|
without_packages=None, skip_default_packages=False):
|
||||||
@ -122,7 +109,7 @@ class PlatformFactory(object):
|
|||||||
platform_dir = dirname(name)
|
platform_dir = dirname(name)
|
||||||
name = util.load_json(name)['name']
|
name = util.load_json(name)['name']
|
||||||
else:
|
else:
|
||||||
_manifest = PlatformManager().find_best_platform(
|
_manifest = PlatformManager().max_satisfying_version(
|
||||||
name, requirements)
|
name, requirements)
|
||||||
if _manifest:
|
if _manifest:
|
||||||
platform_dir = dirname(_manifest['_manifest_path'])
|
platform_dir = dirname(_manifest['_manifest_path'])
|
||||||
|
Reference in New Issue
Block a user