mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 10:07:14 +02:00
Allow installing package by framework name
This commit is contained in:
@ -58,7 +58,7 @@ class BoardNotDefined(PlatformioException):
|
|||||||
|
|
||||||
MESSAGE = "You need to specify board ID using `-b` or `--board` "\
|
MESSAGE = "You need to specify board ID using `-b` or `--board` "\
|
||||||
"option. Supported boards list is available via "\
|
"option. Supported boards list is available via "\
|
||||||
" `platformio boards` command"
|
"`platformio boards` command"
|
||||||
|
|
||||||
|
|
||||||
class UnknownBoard(PlatformioException):
|
class UnknownBoard(PlatformioException):
|
||||||
|
@ -230,12 +230,13 @@ class LibraryManager(BasePkgManager):
|
|||||||
name, dl_data['url'].replace("http://", "https://")
|
name, dl_data['url'].replace("http://", "https://")
|
||||||
if app.get_setting("enable_ssl") else dl_data['url'], requirements)
|
if app.get_setting("enable_ssl") else dl_data['url'], requirements)
|
||||||
|
|
||||||
def install(self,
|
def install( # pylint: disable=arguments-differ
|
||||||
name,
|
self,
|
||||||
requirements=None,
|
name,
|
||||||
silent=False,
|
requirements=None,
|
||||||
trigger_event=True,
|
silent=False,
|
||||||
interactive=False):
|
trigger_event=True,
|
||||||
|
interactive=False):
|
||||||
try:
|
try:
|
||||||
_name, _requirements, _url = self.parse_pkg_input(name,
|
_name, _requirements, _url = self.parse_pkg_input(name,
|
||||||
requirements)
|
requirements)
|
||||||
|
@ -346,7 +346,7 @@ class PkgInstallerMixin(object):
|
|||||||
sha1=None,
|
sha1=None,
|
||||||
track=False):
|
track=False):
|
||||||
pkg_dir = None
|
pkg_dir = None
|
||||||
tmp_dir = mkdtemp("-package", "installing-", self.package_dir)
|
tmp_dir = mkdtemp("-package", "_tmp_installing-", self.package_dir)
|
||||||
src_manifest_dir = None
|
src_manifest_dir = None
|
||||||
src_manifest = {"name": name, "url": url, "requirements": requirements}
|
src_manifest = {"name": name, "url": url, "requirements": requirements}
|
||||||
|
|
||||||
@ -591,8 +591,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
name,
|
name,
|
||||||
requirements=None,
|
requirements=None,
|
||||||
silent=False,
|
silent=False,
|
||||||
trigger_event=True,
|
trigger_event=True):
|
||||||
interactive=False): # pylint: disable=unused-argument
|
|
||||||
name, requirements, url = self.parse_pkg_input(name, requirements)
|
name, requirements, url = self.parse_pkg_input(name, requirements)
|
||||||
package_dir = self.get_package_dir(name, requirements, url)
|
package_dir = self.get_package_dir(name, requirements, url)
|
||||||
|
|
||||||
|
@ -62,17 +62,21 @@ class PlatformManager(BasePkgManager):
|
|||||||
without_packages=None,
|
without_packages=None,
|
||||||
skip_default_package=False,
|
skip_default_package=False,
|
||||||
trigger_event=True,
|
trigger_event=True,
|
||||||
|
silent=False,
|
||||||
**_): # pylint: disable=too-many-arguments
|
**_): # pylint: disable=too-many-arguments
|
||||||
platform_dir = BasePkgManager.install(self, name, requirements)
|
platform_dir = BasePkgManager.install(
|
||||||
|
self, name, requirements, silent=silent)
|
||||||
p = PlatformFactory.newPlatform(platform_dir)
|
p = PlatformFactory.newPlatform(platform_dir)
|
||||||
|
|
||||||
# @Hook: when 'update' operation (trigger_event is False),
|
# @Hook: when 'update' operation (trigger_event is False),
|
||||||
# don't cleanup packages or install them
|
# don't cleanup packages or install them
|
||||||
if not trigger_event:
|
if not trigger_event:
|
||||||
return True
|
return True
|
||||||
|
p.install_packages(
|
||||||
p.install_packages(with_packages, without_packages,
|
with_packages,
|
||||||
skip_default_package)
|
without_packages,
|
||||||
|
skip_default_package,
|
||||||
|
silent=silent)
|
||||||
self.cleanup_packages(p.packages.keys())
|
self.cleanup_packages(p.packages.keys())
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -231,8 +235,8 @@ class PlatformPackagesMixin(object):
|
|||||||
without_packages=None,
|
without_packages=None,
|
||||||
skip_default_package=False,
|
skip_default_package=False,
|
||||||
silent=False):
|
silent=False):
|
||||||
with_packages = set(self.pkg_types_to_names(with_packages or []))
|
with_packages = set(self.find_pkg_names(with_packages or []))
|
||||||
without_packages = set(self.pkg_types_to_names(without_packages or []))
|
without_packages = set(self.find_pkg_names(without_packages or []))
|
||||||
|
|
||||||
upkgs = with_packages | without_packages
|
upkgs = with_packages | without_packages
|
||||||
ppkgs = set(self.packages.keys())
|
ppkgs = set(self.packages.keys())
|
||||||
@ -256,6 +260,23 @@ class PlatformPackagesMixin(object):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def find_pkg_names(self, items):
|
||||||
|
result = []
|
||||||
|
for item in items:
|
||||||
|
candidate = item
|
||||||
|
|
||||||
|
# lookup by package types
|
||||||
|
for _name, _opts in self.packages.items():
|
||||||
|
if _opts.get("type") == item:
|
||||||
|
candidate = _name
|
||||||
|
|
||||||
|
if (self.frameworks and item.startswith("framework-") and
|
||||||
|
item[10:] in self.frameworks):
|
||||||
|
candidate = self.frameworks[item[10:]]['package']
|
||||||
|
|
||||||
|
result.append(candidate)
|
||||||
|
return result
|
||||||
|
|
||||||
def update_packages(self, only_check=False):
|
def update_packages(self, only_check=False):
|
||||||
for name, manifest in self.get_installed_packages().items():
|
for name, manifest in self.get_installed_packages().items():
|
||||||
version = self.packages[name].get("version", "")
|
version = self.packages[name].get("version", "")
|
||||||
@ -518,20 +539,6 @@ class PlatformBase( # pylint: disable=too-many-public-methods
|
|||||||
def get_package_type(self, name):
|
def get_package_type(self, name):
|
||||||
return self.packages[name].get("type")
|
return self.packages[name].get("type")
|
||||||
|
|
||||||
def pkg_types_to_names(self, types):
|
|
||||||
names = []
|
|
||||||
for type_ in types:
|
|
||||||
name = type_
|
|
||||||
# lookup by package types
|
|
||||||
for _name, _opts in self.packages.items():
|
|
||||||
if _opts.get("type") == type_:
|
|
||||||
name = None
|
|
||||||
names.append(_name)
|
|
||||||
# if type is the right name
|
|
||||||
if name:
|
|
||||||
names.append(name)
|
|
||||||
return names
|
|
||||||
|
|
||||||
def configure_default_packages(self, variables, targets):
|
def configure_default_packages(self, variables, targets):
|
||||||
# enable used frameworks
|
# enable used frameworks
|
||||||
frameworks = variables.get("pioframework", [])
|
frameworks = variables.get("pioframework", [])
|
||||||
|
Reference in New Issue
Block a user