From 95604ff66a90f2603bfd48d3b0d95bb9d2d7c2d9 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 23 Mar 2022 18:00:31 +0200 Subject: [PATCH] Minor enhancements --- platformio/builder/tools/pioplatform.py | 2 +- platformio/package/manager/_install.py | 20 +++++++------------- platformio/package/manager/_registry.py | 2 +- platformio/package/manager/_uninstall.py | 11 +++-------- platformio/package/manager/_update.py | 2 +- platformio/package/manager/base.py | 11 +++++++++++ platformio/package/manager/platform.py | 2 +- platformio/platform/_packages.py | 8 +++++--- platformio/platform/factory.py | 2 +- tests/commands/test_lib.py | 2 +- 10 files changed, 32 insertions(+), 30 deletions(-) diff --git a/platformio/builder/tools/pioplatform.py b/platformio/builder/tools/pioplatform.py index 0c3f9e63..1f83913b 100644 --- a/platformio/builder/tools/pioplatform.py +++ b/platformio/builder/tools/pioplatform.py @@ -209,7 +209,7 @@ def PrintConfiguration(env): # pylint: disable=too-many-statements data = [] for item in platform.dump_used_packages(): original_version = get_original_version(item["version"]) - info = "%s %s" % (item["name"], item["version"]) + info = "%s @ %s" % (item["name"], item["version"]) extra = [] if original_version: extra.append(original_version) diff --git a/platformio/package/manager/_install.py b/platformio/package/manager/_install.py index 2962aec7..21860d4a 100644 --- a/platformio/package/manager/_install.py +++ b/platformio/package/manager/_install.py @@ -21,7 +21,7 @@ import click from platformio import app, compat, fs, util from platformio.package.exception import PackageException, UnknownPackageError -from platformio.package.meta import PackageItem, PackageSpec +from platformio.package.meta import PackageItem from platformio.package.unpack import FileUnpacker from platformio.package.vcsclient import VCSClientFactory @@ -78,7 +78,7 @@ class PackageManagerInstallMixin(object): if pkg: self.log.debug( click.style( - "{name} @ {version} is already installed".format( + "{name}@{version} is already installed".format( **pkg.metadata.as_dict() ), fg="yellow", @@ -104,9 +104,7 @@ class PackageManagerInstallMixin(object): self.log.info( click.style( - "{name} @ {version} has been installed!".format( - **pkg.metadata.as_dict() - ), + "{name}@{version} has been installed!".format(**pkg.metadata.as_dict()), fg="green", ) ) @@ -119,14 +117,14 @@ class PackageManagerInstallMixin(object): def install_dependencies(self, pkg, print_header=True): assert isinstance(pkg, PackageItem) - dependencies = self.load_manifest(pkg).get("dependencies") + dependencies = dependencies = self.get_pkg_dependencies(pkg) if not dependencies: return if print_header: self.log.info("Resolving dependencies...") for dependency in dependencies: try: - self._install_dependency(dependency) + self.install_dependency(dependency) except UnknownPackageError: if dependency.get("owner"): self.log.warning( @@ -137,12 +135,8 @@ class PackageManagerInstallMixin(object): ) ) - def _install_dependency(self, dependency): - spec = PackageSpec( - owner=dependency.get("owner"), - name=dependency.get("name"), - requirements=dependency.get("version"), - ) + def install_dependency(self, dependency): + spec = self.dependency_to_spec(dependency) search_filters = { key: value for key, value in dependency.items() diff --git a/platformio/package/manager/_registry.py b/platformio/package/manager/_registry.py index e1537840..887728b3 100644 --- a/platformio/package/manager/_registry.py +++ b/platformio/package/manager/_registry.py @@ -179,7 +179,7 @@ class PackageManageRegistryMixin(object): for item in packages: self.log.warning( - " - {owner}/{name} @ {version}".format( + " - {owner}/{name}@{version}".format( owner=click.style(item["owner"]["username"], fg="cyan"), name=item["name"], version=item["version"]["name"], diff --git a/platformio/package/manager/_uninstall.py b/platformio/package/manager/_uninstall.py index 032e4755..77495018 100644 --- a/platformio/package/manager/_uninstall.py +++ b/platformio/package/manager/_uninstall.py @@ -67,7 +67,7 @@ class PackageManagerUninstallMixin(object): self.log.info( click.style( - "{name} @ {version} has been removed!".format(**pkg.metadata.as_dict()), + "{name}@{version} has been removed!".format(**pkg.metadata.as_dict()), fg="green", ) ) @@ -76,17 +76,12 @@ class PackageManagerUninstallMixin(object): def uninstall_dependencies(self, pkg): assert isinstance(pkg, PackageItem) - dependencies = self.load_manifest(pkg).get("dependencies") + dependencies = self.get_pkg_dependencies(pkg) if not dependencies: return self.log.info("Removing dependencies...") for dependency in dependencies: - spec = PackageSpec( - owner=dependency.get("owner"), - name=dependency.get("name"), - requirements=dependency.get("version"), - ) - pkg = self.get_package(spec) + pkg = self.get_package(self.dependency_to_spec(dependency)) if not pkg: continue self._uninstall(pkg) diff --git a/platformio/package/manager/_update.py b/platformio/package/manager/_update.py index d2a0b6eb..3f71cd7e 100644 --- a/platformio/package/manager/_update.py +++ b/platformio/package/manager/_update.py @@ -92,7 +92,7 @@ class PackageManagerUpdateMixin(object): if not outdated.is_outdated(allow_incompatible=False): self.log.debug( click.style( - "{name} @ {version} is already up-to-date".format( + "{name}@{version} is already up-to-date".format( **pkg.metadata.as_dict() ), fg="yellow", diff --git a/platformio/package/manager/base.py b/platformio/package/manager/base.py index 4432bd8e..755323e9 100644 --- a/platformio/package/manager/base.py +++ b/platformio/package/manager/base.py @@ -287,3 +287,14 @@ class BasePackageManager( # pylint: disable=too-many-public-methods,too-many-in return False return True + + def get_pkg_dependencies(self, pkg): + return self.load_manifest(pkg).get("dependencies") + + @staticmethod + def dependency_to_spec(dependency): + return PackageSpec( + owner=dependency.get("owner"), + name=dependency.get("name"), + requirements=dependency.get("version"), + ) diff --git a/platformio/package/manager/platform.py b/platformio/package/manager/platform.py index 92dc6d61..e7322f03 100644 --- a/platformio/package/manager/platform.py +++ b/platformio/package/manager/platform.py @@ -161,7 +161,7 @@ def remove_unnecessary_platform_packages(dry_run=False): core_packages = get_installed_core_packages() for platform in PlatformPackageManager().get_installed(): p = PlatformFactory.new(platform) - for pkg in p.get_installed_packages(with_optional=True): + for pkg in p.get_installed_packages(with_optional_versions=True): required.add(pkg) pm = ToolPackageManager() diff --git a/platformio/platform/_packages.py b/platformio/platform/_packages.py index b0fbd8d6..d505533d 100644 --- a/platformio/platform/_packages.py +++ b/platformio/platform/_packages.py @@ -36,11 +36,13 @@ class PlatformPackagesMixin(object): pkg = self.get_package(name) return str(pkg.metadata.version) if pkg else None - def get_installed_packages(self, with_optional=False): + def get_installed_packages(self, with_optional=True, with_optional_versions=False): result = [] - for name, options in self.packages.items(): + for name, options in dict(sorted(self.packages.items())).items(): + if not with_optional and options.get("optional"): + continue versions = [options.get("version")] - if with_optional: + if with_optional_versions: versions.extend(options.get("optionalVersions", [])) for version in versions: if not version: diff --git a/platformio/platform/factory.py b/platformio/platform/factory.py index f79d54dd..db51a5d5 100644 --- a/platformio/platform/factory.py +++ b/platformio/platform/factory.py @@ -36,7 +36,7 @@ class PlatformFactory(object): raise UnknownPlatform(name) @classmethod - def new(cls, pkg_or_spec, autoinstall=False): + def new(cls, pkg_or_spec, autoinstall=False) -> PlatformBase: # pylint: disable=import-outside-toplevel from platformio.package.manager.platform import PlatformPackageManager diff --git a/tests/commands/test_lib.py b/tests/commands/test_lib.py index d4faeb1b..9429aaba 100644 --- a/tests/commands/test_lib.py +++ b/tests/commands/test_lib.py @@ -235,4 +235,4 @@ def test_update(clirunner, validate_cliresult, isolated_pio_core, tmpdir_factory cmd_lib, ["-d", str(storage_dir), "update", "ArduinoJson @ ^5"] ) validate_cliresult(result) - assert "ArduinoJson @ 5.13.4 is already up-to-date" in result.stdout + assert "ArduinoJson@5.13.4 is already up-to-date" in result.stdout