From 5fe4de626bb7755bd1d62da88d11916f54359ea6 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Mon, 20 May 2019 17:01:54 +0300 Subject: [PATCH] Implement unified project workspace storage ".pio" // Resolve #1778 --- HISTORY.rst | 32 +++++++++++-------- docs | 2 +- platformio/builder/main.py | 4 ++- platformio/commands/init.py | 2 +- platformio/commands/run.py | 5 +++ platformio/ide/tpls/atom/.gitignore.tpl | 1 - platformio/ide/tpls/clion/.gitignore.tpl | 1 - platformio/ide/tpls/clion/.idea/misc.xml.tpl | 3 -- platformio/ide/tpls/emacs/.gitignore.tpl | 1 - .../netbeans/nbproject/configurations.xml.tpl | 2 +- platformio/ide/tpls/vim/.gitignore.tpl | 1 - platformio/ide/tpls/vscode/.gitignore.tpl | 1 - platformio/project/config.py | 1 + platformio/project/helpers.py | 29 ++++++++++------- 14 files changed, 47 insertions(+), 38 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 65b23388..e9936d1d 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -7,20 +7,24 @@ PlatformIO 4.0 4.0.0 (2019-??-??) ~~~~~~~~~~~~~~~~~~ -* Python 3 support - (`issue #895 `_) -* Share common (global) options between declared build environments using ``[env]`` section in `"platformio.ini" (Project Configuration File) `__ - (`issue #1643 `_) -* Include external configuration files in `"platformio.ini" (Project Configuration File) `__ with `extra_configs `__ option - (`issue #1590 `_) -* Override default `"platformio.ini" (Project Configuration File) `__ with a custom using ``-c, --project-conf`` option for `platformio run `__, `platformio debug `__, or `platformio test `__ commands - (`issue #1913 `_) -* Override default source and include directories for a library via `library.json `__ manifest using ``includeDir`` and ``srcDir`` fields -* Added support for the latest Python "Click" package (CLI Builder) - (`issue #349 `_) -* Deprecated ``--only-check`` PlatformIO Core CLI option for "update" sub-commands, please use ``--dry-run`` instead -* Removed line-buffering from `platformio run `__ command which was leading to omitting progress bar from upload tools - (`issue #856 `_) +* **PlatformIO-based Project** + + - Implemented unified project workspace storage (`workspace_dir `__ -> ``.pio``) for PlatformIO Build System, Library Dependency Finder, and other internal services (`issue #1778 `_) + - Moved ``.pioenvs`` build directory to workspace storage ``.pio/build`` + - Share common (global) options between build environments using ``[env]`` section in `"platformio.ini" (Project Configuration File) `__ (`issue #1643 `_) + - Include external configuration files in `"platformio.ini" (Project Configuration File) `__ with `extra_configs `__ option (`issue #1590 `_) + - Override default `"platformio.ini" (Project Configuration File) `__ with a custom using ``-c, --project-conf`` option for `platformio run `__, `platformio debug `__, or `platformio test `__ commands (`issue #1913 `_) + +* **Infrastructure** + + - Python 3 support (`issue #895 `_) + - Added support for the latest Python "Click" package (CLI) (`issue #349 `_) + - Removed line-buffering from `platformio run `__ command which was leading to omitting progress bar from upload tools (`issue #856 `_) + +* **Miscellaneous** + + - Override default source and include directories for a library via `library.json `__ manifest using ``includeDir`` and ``srcDir`` fields + - Deprecated ``--only-check`` PlatformIO Core CLI option for "update" sub-commands, please use ``--dry-run`` instead PlatformIO 3.0 -------------- diff --git a/docs b/docs index 6e000475..c7591d26 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 6e0004755ac1849b66cf45ec8e0fca47a35226e0 +Subproject commit c7591d260bea5cb04aaab1fd93ca008586f333ea diff --git a/platformio/builder/main.py b/platformio/builder/main.py index 287c0e84..5a5c8676 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -34,7 +34,8 @@ from platformio.proc import get_pythonexe_path from platformio.project.helpers import ( get_project_dir, get_project_optional_dir, get_projectbuild_dir, get_projectdata_dir, get_projectinclude_dir, get_projectlib_dir, - get_projectlibdeps_dir, get_projectsrc_dir, get_projecttest_dir) + get_projectlibdeps_dir, get_projectsrc_dir, get_projecttest_dir, + get_projectworkspace_dir) AllowSubstExceptions(NameError) @@ -108,6 +109,7 @@ DEFAULT_ENV_OPTIONS = dict( UNIX_TIME=int(time()), PIOHOME_DIR=util.get_home_dir(), PROJECT_DIR=get_project_dir(), + PROJECTWORKSPACE_DIR=get_projectworkspace_dir(), PROJECTINCLUDE_DIR=get_projectinclude_dir(), PROJECTSRC_DIR=get_projectsrc_dir(), PROJECTTEST_DIR=get_projecttest_dir(), diff --git a/platformio/commands/init.py b/platformio/commands/init.py index 70f8a8e4..b8f293d2 100644 --- a/platformio/commands/init.py +++ b/platformio/commands/init.py @@ -359,7 +359,7 @@ def init_cvs_ignore(project_dir): if isfile(conf_path): return with open(conf_path, "w") as fp: - fp.writelines([".pio\n", ".pioenvs\n", ".piolibdeps\n"]) + fp.writelines([".pio\n", ".piolibdeps\n"]) def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix, diff --git a/platformio/commands/run.py b/platformio/commands/run.py index a7327d34..00c2622a 100644 --- a/platformio/commands/run.py +++ b/platformio/commands/run.py @@ -263,6 +263,11 @@ def _autoinstall_libdeps(ctx, libraries, verbose=False): def _clean_build_dir(build_dir): + # remove legacy ".pioenvs" folder + legacy_build_dir = join(get_project_dir(), ".pioenvs") + if isdir(legacy_build_dir) and legacy_build_dir != build_dir: + util.rmtree_(legacy_build_dir) + structhash_file = join(build_dir, "structure.hash") proj_hash = calculate_project_hash() diff --git a/platformio/ide/tpls/atom/.gitignore.tpl b/platformio/ide/tpls/atom/.gitignore.tpl index f1520281..04de5dbc 100644 --- a/platformio/ide/tpls/atom/.gitignore.tpl +++ b/platformio/ide/tpls/atom/.gitignore.tpl @@ -1,5 +1,4 @@ .pio -.pioenvs .piolibdeps .clang_complete .gcc-flags.json diff --git a/platformio/ide/tpls/clion/.gitignore.tpl b/platformio/ide/tpls/clion/.gitignore.tpl index 4c5921e1..ff5b1094 100644 --- a/platformio/ide/tpls/clion/.gitignore.tpl +++ b/platformio/ide/tpls/clion/.gitignore.tpl @@ -1,4 +1,3 @@ .pio -.pioenvs .piolibdeps CMakeListsPrivate.txt diff --git a/platformio/ide/tpls/clion/.idea/misc.xml.tpl b/platformio/ide/tpls/clion/.idea/misc.xml.tpl index 9b483ee6..8ba8c6a0 100644 --- a/platformio/ide/tpls/clion/.idea/misc.xml.tpl +++ b/platformio/ide/tpls/clion/.idea/misc.xml.tpl @@ -12,8 +12,5 @@ - - - \ No newline at end of file diff --git a/platformio/ide/tpls/emacs/.gitignore.tpl b/platformio/ide/tpls/emacs/.gitignore.tpl index 2c3fccfb..c086bafd 100644 --- a/platformio/ide/tpls/emacs/.gitignore.tpl +++ b/platformio/ide/tpls/emacs/.gitignore.tpl @@ -1,4 +1,3 @@ .pio -.pioenvs .piolibdeps .clang_complete diff --git a/platformio/ide/tpls/netbeans/nbproject/configurations.xml.tpl b/platformio/ide/tpls/netbeans/nbproject/configurations.xml.tpl index 7c43f565..691c6558 100644 --- a/platformio/ide/tpls/netbeans/nbproject/configurations.xml.tpl +++ b/platformio/ide/tpls/netbeans/nbproject/configurations.xml.tpl @@ -11,7 +11,7 @@ nbproject/private/launcher.properties - ^(nbproject|.pio|.pioenvs)$ + ^(nbproject|.pio)$ . diff --git a/platformio/ide/tpls/vim/.gitignore.tpl b/platformio/ide/tpls/vim/.gitignore.tpl index f1520281..04de5dbc 100644 --- a/platformio/ide/tpls/vim/.gitignore.tpl +++ b/platformio/ide/tpls/vim/.gitignore.tpl @@ -1,5 +1,4 @@ .pio -.pioenvs .piolibdeps .clang_complete .gcc-flags.json diff --git a/platformio/ide/tpls/vscode/.gitignore.tpl b/platformio/ide/tpls/vscode/.gitignore.tpl index 2de98aba..e2fb3b9a 100644 --- a/platformio/ide/tpls/vscode/.gitignore.tpl +++ b/platformio/ide/tpls/vscode/.gitignore.tpl @@ -1,5 +1,4 @@ .pio -.pioenvs .piolibdeps .vscode/.browse.c_cpp.db* .vscode/c_cpp_properties.json diff --git a/platformio/project/config.py b/platformio/project/config.py index d4f82c1b..419ced01 100644 --- a/platformio/project/config.py +++ b/platformio/project/config.py @@ -46,6 +46,7 @@ KNOWN_PLATFORMIO_OPTIONS = [ # Dirs "home_dir", + "workspace_dir", "lib_dir", "libdeps_dir", "include_dir", diff --git a/platformio/project/helpers.py b/platformio/project/helpers.py index 66a9c39b..4112f352 100644 --- a/platformio/project/helpers.py +++ b/platformio/project/helpers.py @@ -73,6 +73,23 @@ def get_project_optional_dir(name, default=None): return paths +def get_projectworkspace_dir(): + return get_project_optional_dir("workspace_dir", + join(get_project_dir(), ".pio")) + + +def get_projectbuild_dir(force=False): + path = get_project_optional_dir("build_dir", + join(get_projectworkspace_dir(), "build")) + try: + if not isdir(path): + os.makedirs(path) + except Exception as e: # pylint: disable=broad-except + if not force: + raise Exception(e) + return path + + def get_projectlib_dir(): return get_project_optional_dir("lib_dir", join(get_project_dir(), "lib")) @@ -101,18 +118,6 @@ def get_projectboards_dir(): join(get_project_dir(), "boards")) -def get_projectbuild_dir(force=False): - path = get_project_optional_dir("build_dir", - join(get_project_dir(), ".pioenvs")) - try: - if not isdir(path): - os.makedirs(path) - except Exception as e: # pylint: disable=broad-except - if not force: - raise Exception(e) - return path - - def get_projectdata_dir(): return get_project_optional_dir("data_dir", join(get_project_dir(), "data"))