diff --git a/platformio/commands/ci.py b/platformio/commands/ci.py index cdfc004c..de3349fa 100644 --- a/platformio/commands/ci.py +++ b/platformio/commands/ci.py @@ -21,8 +21,7 @@ from tempfile import mkdtemp import click from platformio import app, util -from platformio.commands.init import cli as cmd_init -from platformio.commands.init import validate_boards +from platformio.commands.init import cli as cmd_init, validate_boards from platformio.commands.run import cli as cmd_run from platformio.exception import CIBuildEnvsEmpty diff --git a/platformio/commands/init.py b/platformio/commands/init.py index 9b32789b..11ae6932 100644 --- a/platformio/commands/init.py +++ b/platformio/commands/init.py @@ -29,19 +29,14 @@ from platformio.managers.platform import PlatformManager def validate_boards(ctx, param, value): # pylint: disable=W0613 pm = PlatformManager() - # check installed boards - known_boards = set([b['id'] for b in pm.get_installed_boards()]) - # if boards are not listed as installed, check registered boards - if set(value) - known_boards: - known_boards = set([b['id'] for b in pm.get_registered_boards()]) - unknown_boards = set(value) - known_boards - try: - assert not unknown_boards - return value - except AssertionError: - raise click.BadParameter("%s. Please search for the board ID using " - "`platformio boards` command" % - ", ".join(unknown_boards)) + for id_ in value: + try: + pm.board_config(id_) + except exception.UnknownBoard: + raise click.BadParameter( + "`%s`. Please search for board ID using `platformio boards` " + "command" % id_) + return value @click.command( @@ -291,7 +286,6 @@ def init_cvs_ignore(project_dir): def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, force_download): - installed_boards = PlatformManager().get_installed_boards() content = [] used_boards = [] used_platforms = [] @@ -303,24 +297,17 @@ def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, continue used_boards.append(config.get(section, "board")) + pm = PlatformManager() for id_ in board_ids: - manifest = None - for boards in (installed_boards, - PlatformManager.get_registered_boards()): - for b in boards: - if b['id'] == id_: - manifest = b - break - assert manifest is not None - - used_platforms.append(manifest['platform']) + board_config = pm.board_config(id_) + used_platforms.append(board_config['platform']) if id_ in used_boards: continue used_boards.append(id_) - envopts = {"platform": manifest['platform'], "board": id_} + envopts = {"platform": board_config['platform'], "board": id_} # find default framework for board - frameworks = manifest.get("frameworks") + frameworks = board_config.get("frameworks") if frameworks: envopts['framework'] = frameworks[0] diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index 8331cd91..0c4d8a37 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -118,6 +118,15 @@ class PlatformManager(BasePkgManager): def get_registered_boards(): return util.get_api_result("/boards") + def board_config(self, id_): + for manifest in self.get_installed_boards(): + if manifest['id'] == id_: + return manifest + for manifest in self.get_registered_boards(): + if manifest['id'] == id_: + return manifest + raise exception.UnknownBoard(id_) + class PlatformFactory(object):