Move package "version" related things to "platformio.package.version" module

This commit is contained in:
Ivan Kravets
2020-08-23 15:24:31 +03:00
parent da179cb33f
commit 620241e067
8 changed files with 78 additions and 58 deletions

View File

@ -23,6 +23,7 @@ from SCons.Script import COMMAND_LINE_TARGETS # pylint: disable=import-error
from platformio import fs, util from platformio import fs, util
from platformio.compat import WINDOWS from platformio.compat import WINDOWS
from platformio.package.meta import PackageItem from platformio.package.meta import PackageItem
from platformio.package.version import get_original_version
from platformio.platform.exception import UnknownBoard from platformio.platform.exception import UnknownBoard
from platformio.platform.factory import PlatformFactory from platformio.platform.factory import PlatformFactory
from platformio.project.config import ProjectOptions from platformio.project.config import ProjectOptions
@ -210,7 +211,7 @@ def PrintConfiguration(env): # pylint: disable=too-many-statements
def _get_packages_data(): def _get_packages_data():
data = [] data = []
for item in platform.dump_used_packages(): for item in platform.dump_used_packages():
original_version = util.get_original_version(item["version"]) original_version = get_original_version(item["version"])
info = "%s %s" % (item["name"], item["version"]) info = "%s %s" % (item["name"], item["version"])
extra = [] extra = []
if original_version: if original_version:

View File

@ -26,9 +26,9 @@ from SCons.Script import DefaultEnvironment # pylint: disable=import-error
from SCons.Script import Export # pylint: disable=import-error from SCons.Script import Export # pylint: disable=import-error
from SCons.Script import SConscript # pylint: disable=import-error from SCons.Script import SConscript # pylint: disable=import-error
from platformio import fs from platformio import __version__, fs
from platformio.compat import string_types from platformio.compat import string_types
from platformio.util import pioversion_to_intstr from platformio.package.version import pepver_to_semver
SRC_HEADER_EXT = ["h", "hpp"] SRC_HEADER_EXT = ["h", "hpp"]
SRC_ASM_EXT = ["S", "spp", "SPP", "sx", "s", "asm", "ASM"] SRC_ASM_EXT = ["S", "spp", "SPP", "sx", "s", "asm", "ASM"]
@ -94,11 +94,16 @@ def BuildProgram(env):
def ProcessProgramDeps(env): def ProcessProgramDeps(env):
def _append_pio_macros(): def _append_pio_macros():
core_version = pepver_to_semver(__version__)
env.AppendUnique( env.AppendUnique(
CPPDEFINES=[ CPPDEFINES=[
( (
"PLATFORMIO", "PLATFORMIO",
int("{0:02d}{1:02d}{2:02d}".format(*pioversion_to_intstr())), int(
"{0:02d}{1:02d}{2:02d}".format(
core_version.major, core_version.minor, core_version.patch
)
),
) )
] ]
) )

View File

@ -16,12 +16,12 @@ import os
import click import click
from platformio import util
from platformio.cache import cleanup_content_cache from platformio.cache import cleanup_content_cache
from platformio.commands.boards import print_boards from platformio.commands.boards import print_boards
from platformio.compat import dump_json_to_unicode from platformio.compat import dump_json_to_unicode
from platformio.package.manager.platform import PlatformPackageManager from platformio.package.manager.platform import PlatformPackageManager
from platformio.package.meta import PackageItem, PackageSpec from platformio.package.meta import PackageItem, PackageSpec
from platformio.package.version import get_original_version
from platformio.platform.exception import UnknownPlatform from platformio.platform.exception import UnknownPlatform
from platformio.platform.factory import PlatformFactory from platformio.platform.factory import PlatformFactory
@ -121,7 +121,7 @@ def _get_installed_platform_data(platform, with_boards=True, expose_packages=Tru
continue continue
item[key] = value item[key] = value
if key == "version": if key == "version":
item["originalVersion"] = util.get_original_version(value) item["originalVersion"] = get_original_version(value)
data["packages"].append(item) data["packages"].append(item)
return data return data

View File

@ -19,7 +19,7 @@ from time import time
import click import click
import semantic_version import semantic_version
from platformio import __version__, app, exception, fs, telemetry, util from platformio import __version__, app, exception, fs, telemetry
from platformio.cache import cleanup_content_cache from platformio.cache import cleanup_content_cache
from platformio.clients import http from platformio.clients import http
from platformio.commands import PlatformioCLI from platformio.commands import PlatformioCLI
@ -32,6 +32,7 @@ from platformio.package.manager.library import LibraryPackageManager
from platformio.package.manager.platform import PlatformPackageManager from platformio.package.manager.platform import PlatformPackageManager
from platformio.package.manager.tool import ToolPackageManager from platformio.package.manager.tool import ToolPackageManager
from platformio.package.meta import PackageSpec from platformio.package.meta import PackageSpec
from platformio.package.version import pepver_to_semver
from platformio.platform.factory import PlatformFactory from platformio.platform.factory import PlatformFactory
from platformio.proc import is_container from platformio.proc import is_container
@ -87,12 +88,8 @@ def set_caller(caller=None):
class Upgrader(object): class Upgrader(object):
def __init__(self, from_version, to_version): def __init__(self, from_version, to_version):
self.from_version = semantic_version.Version.coerce( self.from_version = pepver_to_semver(from_version)
util.pepver_to_semver(from_version) self.to_version = pepver_to_semver(to_version)
)
self.to_version = semantic_version.Version.coerce(
util.pepver_to_semver(to_version)
)
self._upgraders = [ self._upgraders = [
(semantic_version.Version("3.5.0-a.2"), self._update_dev_platforms), (semantic_version.Version("3.5.0-a.2"), self._update_dev_platforms),
@ -141,9 +138,7 @@ def after_upgrade(ctx):
if last_version == "0.0.0": if last_version == "0.0.0":
app.set_state_item("last_version", __version__) app.set_state_item("last_version", __version__)
elif semantic_version.Version.coerce( elif pepver_to_semver(last_version) > pepver_to_semver(__version__):
util.pepver_to_semver(last_version)
) > semantic_version.Version.coerce(util.pepver_to_semver(__version__)):
click.secho("*" * terminal_width, fg="yellow") click.secho("*" * terminal_width, fg="yellow")
click.secho( click.secho(
"Obsolete PIO Core v%s is used (previous was %s)" "Obsolete PIO Core v%s is used (previous was %s)"
@ -229,9 +224,7 @@ def check_platformio_upgrade():
update_core_packages(silent=True) update_core_packages(silent=True)
latest_version = get_latest_version() latest_version = get_latest_version()
if semantic_version.Version.coerce( if pepver_to_semver(latest_version) <= pepver_to_semver(__version__):
util.pepver_to_semver(latest_version)
) <= semantic_version.Version.coerce(util.pepver_to_semver(__version__)):
return return
terminal_width, _ = click.get_terminal_size() terminal_width, _ = click.get_terminal_size()

View File

@ -357,28 +357,9 @@ class PackageMetaData(object):
self._version = ( self._version = (
value value
if isinstance(value, semantic_version.Version) if isinstance(value, semantic_version.Version)
else self.to_semver(value) else cast_version_to_semver(value)
) )
@staticmethod
def to_semver(value, force=True, raise_exception=False):
assert value
try:
return semantic_version.Version(value)
except ValueError:
pass
if force:
try:
return semantic_version.Version.coerce(value)
except ValueError:
pass
if raise_exception:
raise ValueError("Invalid SemVer version %s" % value)
# parse commit hash
if re.match(r"^[\da-f]+$", value, flags=re.I):
return semantic_version.Version("0.0.0+sha." + value)
return semantic_version.Version("0.0.0+" + value)
def as_dict(self): def as_dict(self):
return dict( return dict(
type=self.type, type=self.type,

View File

@ -0,0 +1,53 @@
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import semantic_version
def cast_version_to_semver(value, force=True, raise_exception=False):
assert value
try:
return semantic_version.Version(value)
except ValueError:
pass
if force:
try:
return semantic_version.Version.coerce(value)
except ValueError:
pass
if raise_exception:
raise ValueError("Invalid SemVer version %s" % value)
# parse commit hash
if re.match(r"^[\da-f]+$", value, flags=re.I):
return semantic_version.Version("0.0.0+sha." + value)
return semantic_version.Version("0.0.0+" + value)
def pepver_to_semver(pepver):
return cast_version_to_semver(
re.sub(r"(\.\d+)\.?(dev|a|b|rc|post)", r"\1-\2.", pepver, 1)
)
def get_original_version(version):
if version.count(".") != 2:
return None
_, raw = version.split(".")[:2]
if int(raw) <= 99:
return None
if int(raw) <= 9999:
return "%s.%s" % (raw[:-2], int(raw[-2:]))
return "%s.%s.%s" % (raw[:-4], int(raw[-4:-2]), int(raw[-2:]))

View File

@ -18,8 +18,9 @@ import subprocess
import click import click
import semantic_version import semantic_version
from platformio import __version__, fs, proc, util from platformio import __version__, fs, proc
from platformio.package.manager.tool import ToolPackageManager from platformio.package.manager.tool import ToolPackageManager
from platformio.package.version import pepver_to_semver
from platformio.platform._packages import PlatformPackagesMixin from platformio.platform._packages import PlatformPackagesMixin
from platformio.platform._run import PlatformRunMixin from platformio.platform._run import PlatformRunMixin
from platformio.platform.board import PlatformBoardConfig from platformio.platform.board import PlatformBoardConfig
@ -31,7 +32,7 @@ class PlatformBase( # pylint: disable=too-many-instance-attributes,too-many-pub
PlatformPackagesMixin, PlatformRunMixin PlatformPackagesMixin, PlatformRunMixin
): ):
PIO_VERSION = semantic_version.Version(util.pepver_to_semver(__version__)) CORE_SEMVER = pepver_to_semver(__version__)
_BOARDS_CACHE = {} _BOARDS_CACHE = {}
def __init__(self, manifest_path): def __init__(self, manifest_path):
@ -110,10 +111,10 @@ class PlatformBase( # pylint: disable=too-many-instance-attributes,too-many-pub
def ensure_engine_compatible(self): def ensure_engine_compatible(self):
if not self.engines or "platformio" not in self.engines: if not self.engines or "platformio" not in self.engines:
return True return True
if self.PIO_VERSION in semantic_version.SimpleSpec(self.engines["platformio"]): if self.CORE_SEMVER in semantic_version.SimpleSpec(self.engines["platformio"]):
return True return True
raise IncompatiblePlatform( raise IncompatiblePlatform(
self.name, str(self.PIO_VERSION), self.engines["platformio"] self.name, str(self.CORE_SEMVER), self.engines["platformio"]
) )
def get_dir(self): def get_dir(self):

View File

@ -244,26 +244,12 @@ def get_mdns_services():
def pioversion_to_intstr(): def pioversion_to_intstr():
""" Legacy for framework-zephyr/scripts/platformio/platformio-build-pre.py"""
vermatch = re.match(r"^([\d\.]+)", __version__) vermatch = re.match(r"^([\d\.]+)", __version__)
assert vermatch assert vermatch
return [int(i) for i in vermatch.group(1).split(".")[:3]] return [int(i) for i in vermatch.group(1).split(".")[:3]]
def pepver_to_semver(pepver):
return re.sub(r"(\.\d+)\.?(dev|a|b|rc|post)", r"\1-\2.", pepver, 1)
def get_original_version(version):
if version.count(".") != 2:
return None
_, raw = version.split(".")[:2]
if int(raw) <= 99:
return None
if int(raw) <= 9999:
return "%s.%s" % (raw[:-2], int(raw[-2:]))
return "%s.%s.%s" % (raw[:-4], int(raw[-4:-2]), int(raw[-2:]))
def items_to_list(items): def items_to_list(items):
if isinstance(items, list): if isinstance(items, list):
return items return items