Minor enhancements

This commit is contained in:
Ivan Kravets
2022-03-23 18:00:31 +02:00
parent 99e0d1071a
commit 95604ff66a
10 changed files with 32 additions and 30 deletions

View File

@ -209,7 +209,7 @@ def PrintConfiguration(env): # pylint: disable=too-many-statements
data = [] data = []
for item in platform.dump_used_packages(): for item in platform.dump_used_packages():
original_version = 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:
extra.append(original_version) extra.append(original_version)

View File

@ -21,7 +21,7 @@ import click
from platformio import app, compat, fs, util from platformio import app, compat, fs, util
from platformio.package.exception import PackageException, UnknownPackageError 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.unpack import FileUnpacker
from platformio.package.vcsclient import VCSClientFactory from platformio.package.vcsclient import VCSClientFactory
@ -78,7 +78,7 @@ class PackageManagerInstallMixin(object):
if pkg: if pkg:
self.log.debug( self.log.debug(
click.style( click.style(
"{name} @ {version} is already installed".format( "{name}@{version} is already installed".format(
**pkg.metadata.as_dict() **pkg.metadata.as_dict()
), ),
fg="yellow", fg="yellow",
@ -104,9 +104,7 @@ class PackageManagerInstallMixin(object):
self.log.info( self.log.info(
click.style( click.style(
"{name} @ {version} has been installed!".format( "{name}@{version} has been installed!".format(**pkg.metadata.as_dict()),
**pkg.metadata.as_dict()
),
fg="green", fg="green",
) )
) )
@ -119,14 +117,14 @@ class PackageManagerInstallMixin(object):
def install_dependencies(self, pkg, print_header=True): def install_dependencies(self, pkg, print_header=True):
assert isinstance(pkg, PackageItem) assert isinstance(pkg, PackageItem)
dependencies = self.load_manifest(pkg).get("dependencies") dependencies = dependencies = self.get_pkg_dependencies(pkg)
if not dependencies: if not dependencies:
return return
if print_header: if print_header:
self.log.info("Resolving dependencies...") self.log.info("Resolving dependencies...")
for dependency in dependencies: for dependency in dependencies:
try: try:
self._install_dependency(dependency) self.install_dependency(dependency)
except UnknownPackageError: except UnknownPackageError:
if dependency.get("owner"): if dependency.get("owner"):
self.log.warning( self.log.warning(
@ -137,12 +135,8 @@ class PackageManagerInstallMixin(object):
) )
) )
def _install_dependency(self, dependency): def install_dependency(self, dependency):
spec = PackageSpec( spec = self.dependency_to_spec(dependency)
owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
)
search_filters = { search_filters = {
key: value key: value
for key, value in dependency.items() for key, value in dependency.items()

View File

@ -179,7 +179,7 @@ class PackageManageRegistryMixin(object):
for item in packages: for item in packages:
self.log.warning( self.log.warning(
" - {owner}/{name} @ {version}".format( " - {owner}/{name}@{version}".format(
owner=click.style(item["owner"]["username"], fg="cyan"), owner=click.style(item["owner"]["username"], fg="cyan"),
name=item["name"], name=item["name"],
version=item["version"]["name"], version=item["version"]["name"],

View File

@ -67,7 +67,7 @@ class PackageManagerUninstallMixin(object):
self.log.info( self.log.info(
click.style( click.style(
"{name} @ {version} has been removed!".format(**pkg.metadata.as_dict()), "{name}@{version} has been removed!".format(**pkg.metadata.as_dict()),
fg="green", fg="green",
) )
) )
@ -76,17 +76,12 @@ class PackageManagerUninstallMixin(object):
def uninstall_dependencies(self, pkg): def uninstall_dependencies(self, pkg):
assert isinstance(pkg, PackageItem) assert isinstance(pkg, PackageItem)
dependencies = self.load_manifest(pkg).get("dependencies") dependencies = self.get_pkg_dependencies(pkg)
if not dependencies: if not dependencies:
return return
self.log.info("Removing dependencies...") self.log.info("Removing dependencies...")
for dependency in dependencies: for dependency in dependencies:
spec = PackageSpec( pkg = self.get_package(self.dependency_to_spec(dependency))
owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
)
pkg = self.get_package(spec)
if not pkg: if not pkg:
continue continue
self._uninstall(pkg) self._uninstall(pkg)

View File

@ -92,7 +92,7 @@ class PackageManagerUpdateMixin(object):
if not outdated.is_outdated(allow_incompatible=False): if not outdated.is_outdated(allow_incompatible=False):
self.log.debug( self.log.debug(
click.style( click.style(
"{name} @ {version} is already up-to-date".format( "{name}@{version} is already up-to-date".format(
**pkg.metadata.as_dict() **pkg.metadata.as_dict()
), ),
fg="yellow", fg="yellow",

View File

@ -287,3 +287,14 @@ class BasePackageManager( # pylint: disable=too-many-public-methods,too-many-in
return False return False
return True 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"),
)

View File

@ -161,7 +161,7 @@ def remove_unnecessary_platform_packages(dry_run=False):
core_packages = get_installed_core_packages() core_packages = get_installed_core_packages()
for platform in PlatformPackageManager().get_installed(): for platform in PlatformPackageManager().get_installed():
p = PlatformFactory.new(platform) 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) required.add(pkg)
pm = ToolPackageManager() pm = ToolPackageManager()

View File

@ -36,11 +36,13 @@ class PlatformPackagesMixin(object):
pkg = self.get_package(name) pkg = self.get_package(name)
return str(pkg.metadata.version) if pkg else None 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 = [] 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")] versions = [options.get("version")]
if with_optional: if with_optional_versions:
versions.extend(options.get("optionalVersions", [])) versions.extend(options.get("optionalVersions", []))
for version in versions: for version in versions:
if not version: if not version:

View File

@ -36,7 +36,7 @@ class PlatformFactory(object):
raise UnknownPlatform(name) raise UnknownPlatform(name)
@classmethod @classmethod
def new(cls, pkg_or_spec, autoinstall=False): def new(cls, pkg_or_spec, autoinstall=False) -> PlatformBase:
# pylint: disable=import-outside-toplevel # pylint: disable=import-outside-toplevel
from platformio.package.manager.platform import PlatformPackageManager from platformio.package.manager.platform import PlatformPackageManager

View File

@ -235,4 +235,4 @@ def test_update(clirunner, validate_cliresult, isolated_pio_core, tmpdir_factory
cmd_lib, ["-d", str(storage_dir), "update", "ArduinoJson @ ^5"] cmd_lib, ["-d", str(storage_dir), "update", "ArduinoJson @ ^5"]
) )
validate_cliresult(result) 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