Update to semantic_version 2.8.0

This commit is contained in:
Ivan Kravets
2019-08-29 13:49:52 +03:00
parent 519156512c
commit ed39a755bc
5 changed files with 21 additions and 39 deletions

View File

@ -97,7 +97,6 @@ env.Replace(
for key in list(clivars.keys()) if key in env for key in list(clivars.keys()) if key in env
}) })
if env.subst("$BUILDCACHE_DIR"): if env.subst("$BUILDCACHE_DIR"):
if not isdir(env.subst("$BUILDCACHE_DIR")): if not isdir(env.subst("$BUILDCACHE_DIR")):
makedirs(env.subst("$BUILDCACHE_DIR")) makedirs(env.subst("$BUILDCACHE_DIR"))

View File

@ -21,6 +21,7 @@ from glob import glob
from os.path import isdir, join from os.path import isdir, join
import click import click
import semantic_version
from platformio import app, exception, util from platformio import app, exception, util
from platformio.compat import glob_escape, string_types from platformio.compat import glob_escape, string_types
@ -166,8 +167,13 @@ class LibraryManager(BasePkgManager):
return 0 return 0
return -1 if date1 < date2 else 1 return -1 if date1 < date2 else 1
semver_spec = self.parse_semver_spec( semver_spec = None
requirements) if requirements else None try:
semver_spec = semantic_version.SimpleSpec(
requirements) if requirements else None
except ValueError:
pass
item = {} item = {}
for v in versions: for v in versions:

View File

@ -86,19 +86,18 @@ class PkgRepoMixin(object):
def max_satisfying_repo_version(self, versions, requirements=None): def max_satisfying_repo_version(self, versions, requirements=None):
item = None item = None
reqspec = None reqspec = None
if requirements: try:
try: reqspec = semantic_version.SimpleSpec(
reqspec = self.parse_semver_spec(requirements, requirements) if requirements else None
raise_exception=True) except ValueError:
except ValueError: pass
pass
for v in versions: for v in versions:
if not self.is_system_compatible(v.get("system")): if not self.is_system_compatible(v.get("system")):
continue continue
# if "platformio" in v.get("engines", {}): # if "platformio" in v.get("engines", {}):
# if PkgRepoMixin.PIO_VERSION not in self.parse_semver_spec( # if PkgRepoMixin.PIO_VERSION not in requirements.SimpleSpec(
# v['engines']['platformio'], raise_exception=True): # v['engines']['platformio']):
# continue # continue
specver = semantic_version.Version(v['version']) specver = semantic_version.Version(v['version'])
if reqspec and specver not in reqspec: if reqspec and specver not in reqspec:
@ -218,28 +217,6 @@ class PkgInstallerMixin(object):
with FileUnpacker(source_path) as fu: with FileUnpacker(source_path) as fu:
return fu.unpack(dest_dir, with_progress=False) return fu.unpack(dest_dir, with_progress=False)
@staticmethod
def parse_semver_spec(value, raise_exception=False):
try:
# Workaround for ^ issue and pre-releases
# https://github.com/rbarrois/python-semanticversion/issues/61
requirements = []
for item in str(value).split(","):
item = item.strip()
if not item:
continue
if item.startswith("^"):
major = semantic_version.Version.coerce(item[1:]).major
requirements.append(">=%s" % major)
requirements.append("<%s" % (int(major) + 1))
else:
requirements.append(item)
return semantic_version.Spec(*requirements)
except ValueError as e:
if raise_exception:
raise e
return None
@staticmethod @staticmethod
def parse_semver_version(value, raise_exception=False): def parse_semver_version(value, raise_exception=False):
try: try:
@ -423,8 +400,8 @@ class PkgInstallerMixin(object):
return manifest return manifest
try: try:
if requirements and not self.parse_semver_spec( if requirements and not semantic_version.SimpleSpec(
requirements, raise_exception=True).match( requirements).match(
self.parse_semver_version(manifest['version'], self.parse_semver_version(manifest['version'],
raise_exception=True)): raise_exception=True)):
continue continue
@ -557,8 +534,8 @@ class PkgInstallerMixin(object):
"Package version %s doesn't satisfy requirements %s" % "Package version %s doesn't satisfy requirements %s" %
(tmp_manifest['version'], requirements)) (tmp_manifest['version'], requirements))
try: try:
assert tmp_semver and tmp_semver in self.parse_semver_spec( assert tmp_semver and tmp_semver in semantic_version.SimpleSpec(
requirements, raise_exception=True), mismatch_error requirements), mismatch_error
except (AssertionError, ValueError): except (AssertionError, ValueError):
assert tmp_manifest['version'] == requirements, mismatch_error assert tmp_manifest['version'] == requirements, mismatch_error

View File

@ -501,7 +501,7 @@ class PlatformBase( # pylint: disable=too-many-public-methods
self.package_repositories) self.package_repositories)
# if self.engines and "platformio" in self.engines: # if self.engines and "platformio" in self.engines:
# if self.PIO_VERSION not in semantic_version.Spec( # if self.PIO_VERSION not in semantic_version.SimpleSpec(
# self.engines['platformio']): # self.engines['platformio']):
# raise exception.IncompatiblePlatform(self.name, # raise exception.IncompatiblePlatform(self.name,
# str(self.PIO_VERSION)) # str(self.PIO_VERSION))

View File

@ -23,7 +23,7 @@ install_requires = [
"colorama", "colorama",
"pyserial>=3,<4,!=3.3", "pyserial>=3,<4,!=3.3",
"requests>=2.4.0,<3", "requests>=2.4.0,<3",
"semantic_version>=2.5.0,<2.7.0", "semantic_version>=2.8.0,<3",
"tabulate>=0.8.3,<1" "tabulate>=0.8.3,<1"
] ]