Fix platform installer if platform is already installed

This commit is contained in:
Ivan Kravets
2016-05-29 17:59:08 +03:00
parent b7921c7dcb
commit 806f6cd2ab
2 changed files with 19 additions and 18 deletions

View File

@ -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

View File

@ -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'])