forked from platformio/platformio-core
Added support for dependencies declared in a "tool" type package
This commit is contained in:
@ -18,6 +18,7 @@ PlatformIO Core 5
|
||||
* `pio pkg outdated <https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_pack.html>`__ - check for project outdated packages
|
||||
* `pio pkg exec <https://docs.platformio.org/en/latest/core/userguide/pkg/cmd_exec.html>`_ - run command from package tool (`issue #4163 <https://github.com/platformio/platformio-core/issues/4163>`_)
|
||||
|
||||
- Added support for dependencies declared in a "tool" type package
|
||||
- Dropped automatic updates of global libraries and development platforms (`issue #4179 <https://github.com/platformio/platformio-core/issues/4179>`_)
|
||||
- Dropped support for "pythonPackages" field in "platform.json" manifest in favor of `Extra Python Dependencies <https://docs.platformio.org/en/latest/scripting/examples/extra_python_packages.html>`__
|
||||
|
||||
|
@ -20,8 +20,8 @@ import tempfile
|
||||
import click
|
||||
|
||||
from platformio import app, compat, fs, util
|
||||
from platformio.package.exception import PackageException
|
||||
from platformio.package.meta import PackageItem
|
||||
from platformio.package.exception import PackageException, UnknownPackageError
|
||||
from platformio.package.meta import PackageItem, PackageSpec
|
||||
from platformio.package.unpack import FileUnpacker
|
||||
from platformio.package.vcsclient import VCSClientFactory
|
||||
|
||||
@ -115,7 +115,38 @@ class PackageManagerInstallMixin(object):
|
||||
return pkg
|
||||
|
||||
def install_dependencies(self, pkg):
|
||||
pass
|
||||
assert isinstance(pkg, PackageItem)
|
||||
manifest = self.load_manifest(pkg)
|
||||
dependencies = manifest.get("dependencies")
|
||||
if not dependencies:
|
||||
return
|
||||
self.log.info("Resolving dependencies...")
|
||||
for dependency in dependencies:
|
||||
if not self._install_dependency(dependency):
|
||||
self.log.warning(
|
||||
click.style(
|
||||
"Warning! Could not install dependency %s for package '%s'"
|
||||
% (dependency, pkg.metadata.name),
|
||||
fg="yellow",
|
||||
)
|
||||
)
|
||||
|
||||
def _install_dependency(self, dependency):
|
||||
spec = PackageSpec(
|
||||
owner=dependency.get("owner"),
|
||||
name=dependency.get("name"),
|
||||
requirements=dependency.get("version"),
|
||||
)
|
||||
search_filters = {
|
||||
key: value
|
||||
for key, value in dependency.items()
|
||||
if key in ("authors", "platforms", "frameworks")
|
||||
}
|
||||
try:
|
||||
return self._install(spec, search_filters=search_filters or None)
|
||||
except UnknownPackageError:
|
||||
pass
|
||||
return None
|
||||
|
||||
def install_from_url(self, url, spec, checksum=None):
|
||||
spec = self.ensure_spec(spec)
|
||||
|
@ -19,7 +19,7 @@ import click
|
||||
|
||||
from platformio import fs
|
||||
from platformio.package.exception import UnknownPackageError
|
||||
from platformio.package.meta import PackageSpec
|
||||
from platformio.package.meta import PackageItem, PackageSpec
|
||||
|
||||
|
||||
class PackageManagerUninstallMixin(object):
|
||||
@ -75,4 +75,18 @@ class PackageManagerUninstallMixin(object):
|
||||
return pkg
|
||||
|
||||
def uninstall_dependencies(self, pkg):
|
||||
pass
|
||||
assert isinstance(pkg, PackageItem)
|
||||
manifest = self.load_manifest(pkg)
|
||||
if not manifest.get("dependencies"):
|
||||
return
|
||||
self.log.info(click.style("Removing dependencies...", fg="yellow"))
|
||||
for dependency in manifest.get("dependencies"):
|
||||
spec = PackageSpec(
|
||||
owner=dependency.get("owner"),
|
||||
name=dependency.get("name"),
|
||||
requirements=dependency.get("version"),
|
||||
)
|
||||
pkg = self.get_package(spec)
|
||||
if not pkg:
|
||||
continue
|
||||
self._uninstall(pkg)
|
||||
|
@ -15,14 +15,12 @@
|
||||
import json
|
||||
import os
|
||||
|
||||
import click
|
||||
|
||||
from platformio.package.exception import (
|
||||
MissingPackageManifestError,
|
||||
UnknownPackageError,
|
||||
)
|
||||
from platformio.package.manager.base import BasePackageManager
|
||||
from platformio.package.meta import PackageItem, PackageSpec, PackageType
|
||||
from platformio.package.meta import PackageSpec, PackageType
|
||||
from platformio.project.config import ProjectConfig
|
||||
|
||||
|
||||
@ -107,53 +105,3 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
|
||||
return True
|
||||
|
||||
raise e
|
||||
|
||||
def install_dependencies(self, pkg):
|
||||
assert isinstance(pkg, PackageItem)
|
||||
manifest = self.load_manifest(pkg)
|
||||
if not manifest.get("dependencies"):
|
||||
return
|
||||
self.log.info("Installing dependencies...")
|
||||
for dependency in manifest.get("dependencies"):
|
||||
if not self._install_dependency(dependency):
|
||||
self.log.warning(
|
||||
click.style(
|
||||
"Warning! Could not install dependency %s for package '%s'"
|
||||
% (dependency, pkg.metadata.name),
|
||||
fg="yellow",
|
||||
)
|
||||
)
|
||||
|
||||
def _install_dependency(self, dependency):
|
||||
spec = PackageSpec(
|
||||
owner=dependency.get("owner"),
|
||||
name=dependency.get("name"),
|
||||
requirements=dependency.get("version"),
|
||||
)
|
||||
search_filters = {
|
||||
key: value
|
||||
for key, value in dependency.items()
|
||||
if key in ("authors", "platforms", "frameworks")
|
||||
}
|
||||
try:
|
||||
return self._install(spec, search_filters=search_filters or None)
|
||||
except UnknownPackageError:
|
||||
pass
|
||||
return None
|
||||
|
||||
def uninstall_dependencies(self, pkg):
|
||||
assert isinstance(pkg, PackageItem)
|
||||
manifest = self.load_manifest(pkg)
|
||||
if not manifest.get("dependencies"):
|
||||
return
|
||||
self.log.info(click.style("Removing dependencies...", fg="yellow"))
|
||||
for dependency in manifest.get("dependencies"):
|
||||
spec = PackageSpec(
|
||||
owner=dependency.get("owner"),
|
||||
name=dependency.get("name"),
|
||||
requirements=dependency.get("version"),
|
||||
)
|
||||
pkg = self.get_package(spec)
|
||||
if not pkg:
|
||||
continue
|
||||
self._uninstall(pkg)
|
||||
|
Reference in New Issue
Block a user