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 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>`_)
|
* `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 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>`__
|
- 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
|
import click
|
||||||
|
|
||||||
from platformio import app, compat, fs, util
|
from platformio import app, compat, fs, util
|
||||||
from platformio.package.exception import PackageException
|
from platformio.package.exception import PackageException, UnknownPackageError
|
||||||
from platformio.package.meta import PackageItem
|
from platformio.package.meta import PackageItem, PackageSpec
|
||||||
from platformio.package.unpack import FileUnpacker
|
from platformio.package.unpack import FileUnpacker
|
||||||
from platformio.package.vcsclient import VCSClientFactory
|
from platformio.package.vcsclient import VCSClientFactory
|
||||||
|
|
||||||
@ -115,7 +115,38 @@ class PackageManagerInstallMixin(object):
|
|||||||
return pkg
|
return pkg
|
||||||
|
|
||||||
def install_dependencies(self, 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):
|
def install_from_url(self, url, spec, checksum=None):
|
||||||
spec = self.ensure_spec(spec)
|
spec = self.ensure_spec(spec)
|
||||||
|
@ -19,7 +19,7 @@ import click
|
|||||||
|
|
||||||
from platformio import fs
|
from platformio import fs
|
||||||
from platformio.package.exception import UnknownPackageError
|
from platformio.package.exception import UnknownPackageError
|
||||||
from platformio.package.meta import PackageSpec
|
from platformio.package.meta import PackageItem, PackageSpec
|
||||||
|
|
||||||
|
|
||||||
class PackageManagerUninstallMixin(object):
|
class PackageManagerUninstallMixin(object):
|
||||||
@ -75,4 +75,18 @@ class PackageManagerUninstallMixin(object):
|
|||||||
return pkg
|
return pkg
|
||||||
|
|
||||||
def uninstall_dependencies(self, 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 json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import click
|
|
||||||
|
|
||||||
from platformio.package.exception import (
|
from platformio.package.exception import (
|
||||||
MissingPackageManifestError,
|
MissingPackageManifestError,
|
||||||
UnknownPackageError,
|
UnknownPackageError,
|
||||||
)
|
)
|
||||||
from platformio.package.manager.base import BasePackageManager
|
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
|
from platformio.project.config import ProjectConfig
|
||||||
|
|
||||||
|
|
||||||
@ -107,53 +105,3 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
raise e
|
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