From 838063b1b7fd0036c47db2f08edbb68bb0271ca7 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Thu, 1 Sep 2016 15:14:38 +0300 Subject: [PATCH] Allow passing custom project configuration options to ``platformio ci`` and ``platformio init`` commands using ``-O, --project-option``. --- HISTORY.rst | 2 ++ docs/userguide/cmd_ci.rst | 30 +++++++++++++++--------------- docs/userguide/cmd_init.rst | 14 +++++--------- platformio/commands/ci.py | 9 ++++++++- platformio/commands/init.py | 14 +++++++------- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 052b63b2..481b1970 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -70,6 +70,8 @@ PlatformIO 3.0 * Renamed ``platformio serialports`` command to ``platformio device`` * Build System: Attach custom Before/Pre and After/Post actions for targets (`issue #542 `_) +* Allowed passing custom project configuration options to ``platformio ci`` + and ``platformio init`` commands using ``-O, --project-option``. * Print human-readable information when processing environments without ``-v, --verbose`` option (`issue #721 `_) diff --git a/docs/userguide/cmd_ci.rst b/docs/userguide/cmd_ci.rst index 72d647c2..708996e2 100644 --- a/docs/userguide/cmd_ci.rst +++ b/docs/userguide/cmd_ci.rst @@ -49,20 +49,11 @@ Systems please follow to :ref:`ci` page. .. note:: :ref:`cmd_ci` command is useful for library developers. It allows to build different examples without creating own project per them. Also, is possible - to upload firmware to the target device. In this case, need to create - :ref:`projectconf` where specify "upload" :ref:`projectconf_targets`. Custom - upload port can be overridden with :ref:`projectconf_upload_port` option. - Then need to specify the path to this :ref:`projectconf` to - :option:`platformio ci --project-conf`. For example, - - .. code-block:: ini - - [env:uno] - platform = atmelavr - framework = arduino - targets = upload - ; custom upload port - ; upload_port = ... + to upload firmware to the target device. In this case, you need to pass + additional option ``--project-option="targets=upload"``. What is more, + you can specify custom upload port using + ``--project-option="upload_port="`` option. + See :option:`platformio ci --project-option` for details. Options ------- @@ -120,10 +111,19 @@ temporary directory within your operation system. Don't remove :option:`platformio ci --build-dir` after build process. .. option:: - --project-conf + -P, --project-conf Buid project using pre-configured :ref:`projectconf`. +.. option:: + -O, --project-option + +Pass additional options from :ref:`projectconf` to +:option:`platformio init --project-option` command. For example, +automatically install dependent libraries +``platformio ci --project-option="lib_deps=ArduinoJSON"`` or ignore specific +library ``platformio ci --project-option="lib_ignore=SomeLib"``. + .. option:: -v, --verbose diff --git a/docs/userguide/cmd_init.rst b/docs/userguide/cmd_init.rst index eb001fdd..a9dcb194 100644 --- a/docs/userguide/cmd_init.rst +++ b/docs/userguide/cmd_init.rst @@ -65,18 +65,17 @@ The full list with pre-configured boards is available here :ref:`platforms`. .. option:: --ide -Initialise PlatformIO project for the specified IDE which can be imported later +Initialize PlatformIO project for the specified IDE which can be imported later via "Import Project" functionality. A list with supported IDE is available within ``platformio init --help`` command. Also, please take a look at :ref:`ide` page. .. option:: - --enable-auto-uploading + -O, --project-option -If you initialise project with the specified -:option:`platformio init --board`, then *PlatformIO* -will create environment with enabled firmware auto-uploading. +Initialize project with additional options from :ref:`projectconf`. For example, +``platformio init --project-option="lib_deps=ArduinoJSON"``. .. option:: --env-prefix @@ -104,7 +103,6 @@ Examples platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| src - Put your source files here lib - Put here project specific (private) libraries - Do you want to continue? [y/N]: y Project has been successfully initialized! Useful commands: `platformio run` - process/build project from the current directory @@ -122,14 +120,13 @@ Examples platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| src - Put your source files here lib - Put here project specific (private) libraries - Do you want to continue? [y/N]: y Project has been successfully initialized! Useful commands: `platformio run` - process/build project from the current directory `platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board `platformio run --target clean` - clean project (remove compiled files) -3. Initialise project for Arduino Uno +3. Initialize project for Arduino Uno .. code-block:: bash @@ -143,7 +140,6 @@ Examples platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| src - Put your source files here lib - Put here project specific (private) libraries - Do you want to continue? [y/N]: y Project has been successfully initialized! Useful commands: `platformio run` - process/build project from the current directory diff --git a/platformio/commands/ci.py b/platformio/commands/ci.py index 5303932a..cdfc004c 100644 --- a/platformio/commands/ci.py +++ b/platformio/commands/ci.py @@ -68,6 +68,7 @@ def validate_path(ctx, param, value): # pylint: disable=unused-argument resolve_path=True)) @click.option("--keep-build-dir", is_flag=True) @click.option( + "-C", "--project-conf", type=click.Path( exists=True, @@ -75,6 +76,7 @@ def validate_path(ctx, param, value): # pylint: disable=unused-argument dir_okay=False, readable=True, resolve_path=True)) +@click.option("-O", "--project-option", multiple=True) @click.option("-v", "--verbose", is_flag=True) @click.pass_context def cli(ctx, # pylint: disable=R0913 @@ -85,6 +87,7 @@ def cli(ctx, # pylint: disable=R0913 build_dir, keep_build_dir, project_conf, + project_option, verbose): if not src and getenv("PLATFORMIO_CI_SRC"): @@ -113,7 +116,11 @@ def cli(ctx, # pylint: disable=R0913 _exclude_contents(build_dir, exclude) # initialise project - ctx.invoke(cmd_init, project_dir=build_dir, board=board) + ctx.invoke( + cmd_init, + project_dir=build_dir, + board=board, + project_option=project_option) # process project ctx.invoke(cmd_run, project_dir=build_dir, verbose=verbose) diff --git a/platformio/commands/init.py b/platformio/commands/init.py index f04c7088..d7eee985 100644 --- a/platformio/commands/init.py +++ b/platformio/commands/init.py @@ -58,14 +58,14 @@ def validate_boards(ctx, param, value): # pylint: disable=W0613 "-b", "--board", multiple=True, metavar="ID", callback=validate_boards) @click.option( "--ide", type=click.Choice(ProjectGenerator.get_supported_ides())) -@click.option("--enable-auto-uploading", is_flag=True) +@click.option("-O", "--project-option", multiple=True) @click.option("--env-prefix", default="") @click.pass_context def cli(ctx, # pylint: disable=R0913 project_dir, board, ide, - enable_auto_uploading, + project_option, env_prefix): if project_dir == getcwd(): @@ -92,8 +92,8 @@ def cli(ctx, # pylint: disable=R0913 init_base_project(project_dir) if board: - fill_project_envs(ctx, project_dir, board, enable_auto_uploading, - env_prefix, ide is not None) + fill_project_envs(ctx, project_dir, board, project_option, env_prefix, + ide is not None) if ide: if not board: @@ -288,7 +288,7 @@ def init_cvs_ignore(project_dir): def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals - ctx, project_dir, board_ids, enable_auto_uploading, env_prefix, + ctx, project_dir, board_ids, project_option, env_prefix, force_download): installed_boards = PlatformManager().get_installed_boards() content = [] @@ -327,8 +327,8 @@ def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals content.append("framework = %s" % frameworks[0]) content.append("board = %s" % id_) - if enable_auto_uploading: - content.append("targets = upload") + if project_option: + content.extend(project_option) if force_download and used_platforms: _install_dependent_platforms(ctx, used_platforms)