From 202e2e0af56f13dbac72869584ea0b4402214967 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Sun, 27 Jul 2014 22:39:41 +0300 Subject: [PATCH] Added support to override UPLOAD_PORT via cli-option "$ platformio run --upload-port=" --- platformio/__main__.py | 4 ++-- platformio/commands/init.py | 4 ++-- platformio/commands/run.py | 27 ++++++++++++++++++++------- platformio/exception.py | 10 ++++++++++ 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/platformio/__main__.py b/platformio/__main__.py index 4312b422..bf8f26d0 100644 --- a/platformio/__main__.py +++ b/platformio/__main__.py @@ -6,7 +6,7 @@ from os.path import join from sys import exit as sys_exit from traceback import format_exc -from click import command, MultiCommand, style, version_option +from click import command, MultiCommand, version_option from platformio import __version__ from platformio.exception import PlatformioException, UnknownCLICommand @@ -45,7 +45,7 @@ def main(): cli() except Exception as e: # pylint: disable=W0703 if isinstance(e, PlatformioException): - sys_exit(style("Error: ", fg="red") + str(e)) + sys_exit("Error: " + str(e)) else: print format_exc() diff --git a/platformio/commands/init.py b/platformio/commands/init.py index b1dd14bd..e839f81a 100644 --- a/platformio/commands/init.py +++ b/platformio/commands/init.py @@ -16,13 +16,13 @@ def cli(): if isfile("platformio.ini") and isdir("src"): raise ProjectInitialized() - for d in (".pioenvs", "lib", "src"): + for d in ("lib", "src"): if not isdir(d): makedirs(d) if not isfile("platformio.ini"): copyfile(join(get_source_dir(), "projectconftpl.ini"), "platformio.ini") - secho("Project successfully initialized.\n" + secho("Project has been successfully initialized!\n" "Please put your source code to `src` directory, " "external libraries to `lib` and " "setup environments in `platformio.ini` file.\n" diff --git a/platformio/commands/run.py b/platformio/commands/run.py index 5f88253f..820eea65 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -3,7 +3,8 @@ from click import command, echo, option, secho, style -from platformio.exception import ProjectEnvsNotAvaialable, UndefinedEnvPlatform +from platformio.exception import (InvalidEnvName, ProjectEnvsNotAvaialable, + UndefinedEnvPlatform, UnknownEnvNames) from platformio.platforms._base import PlatformFactory from platformio.util import get_project_config @@ -11,26 +12,38 @@ from platformio.util import get_project_config @command("run", short_help="Process project environments") @option("--environment", "-e", multiple=True, metavar="") @option("--target", "-t", multiple=True, metavar="") -def cli(environment, target): +@option("--upload-port", metavar="") +def cli(environment, target, upload_port): config = get_project_config() if not config.sections(): raise ProjectEnvsNotAvaialable() + envnames = [s[4:] for s in config.sections()] + unknown = set(environment) - set(envnames) + if unknown: + raise UnknownEnvNames(", ".join(unknown)) + for section in config.sections(): if section[:4] != "env:": - continue + raise InvalidEnvName(section) envname = section[4:] if environment and envname not in environment: - echo("Skipped %s environment" % style(envname, fg="yellow")) + # echo("Skipped %s environment" % style(envname, fg="yellow")) continue echo("Processing %s environment:" % style(envname, fg="cyan")) - variables = ["%s=%s" % (o.upper(), v) for o, v in config.items(section) - if o != "targets"] - variables.append("PIOENV=" + envname) + + variables = ["PIOENV=" + envname] + if upload_port: + variables.append("UPLOAD_PORT=%s" % upload_port) + for k, v in config.items(section): + k = k.upper() + if k == "TARGETS" or (k == "UPLOAD_PORT" and upload_port): + continue + variables.append("%s=%s" % (k.upper(), v)) envtargets = [] if target: diff --git a/platformio/exception.py b/platformio/exception.py index 9fe41d1e..7b7d08f1 100644 --- a/platformio/exception.py +++ b/platformio/exception.py @@ -87,6 +87,16 @@ class ProjectEnvsNotAvaialable(PlatformioException): MESSAGE = "Please setup environments in `platformio.ini` file." +class InvalidEnvName(PlatformioException): + + MESSAGE = "Invalid environment '%s'. The name must start " "with 'env:'." + + +class UnknownEnvNames(PlatformioException): + + MESSAGE = "Unknown environment names '%s'." + + class GetSerialPortsError(PlatformioException): MESSAGE = "No implementation for your platform ('%s') available"