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

View File

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