diff --git a/platformio/package/manager/library.py b/platformio/package/manager/library.py index 3ce2a1fa..e67a5110 100644 --- a/platformio/package/manager/library.py +++ b/platformio/package/manager/library.py @@ -21,13 +21,15 @@ from platformio.package.exception import ( ) from platformio.package.manager.base import BasePackageManager from platformio.package.meta import PackageItem, PackageSpec, PackageType -from platformio.project.helpers import get_project_global_lib_dir +from platformio.project.config import ProjectConfig class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-ancestors def __init__(self, package_dir=None): super(LibraryPackageManager, self).__init__( - PackageType.LIBRARY, package_dir or get_project_global_lib_dir() + PackageType.LIBRARY, + package_dir + or ProjectConfig.get_instance().get("platformio", "globallib_dir"), ) @property diff --git a/platformio/project/helpers.py b/platformio/project/helpers.py index 9e995b7b..4cf66470 100644 --- a/platformio/project/helpers.py +++ b/platformio/project/helpers.py @@ -43,6 +43,23 @@ def find_project_dir_above(path): return None +def get_project_all_lib_dirs(): + """Used by platformio-node-helpers.project.observer.fetchLibDirs""" + config = ProjectConfig.get_instance() + libdeps_dir = config.get("platformio", "libdeps_dir") + result = [ + config.get("platformio", "globallib_dir"), + config.get("platformio", "lib_dir"), + libdeps_dir, + ] + if not os.path.isdir(libdeps_dir): + return result + for d in os.listdir(libdeps_dir): + if os.path.isdir(os.path.join(libdeps_dir, d)): + result.append(os.path.join(libdeps_dir, d)) + return result + + def get_project_cache_dir(): """Deprecated, use ProjectConfig.get("platformio", "cache_dir") instead""" return ProjectConfig.get_instance().get("platformio", "cache_dir") diff --git a/platformio/project/options.py b/platformio/project/options.py index c8a46da9..5314da6e 100644 --- a/platformio/project/options.py +++ b/platformio/project/options.py @@ -115,9 +115,9 @@ def validate_dir(path): def validate_core_dir(path): - default = ProjectOptions["platformio.core_dir"].default + default_dir = ProjectOptions["platformio.core_dir"].default win_core_dir = None - if IS_WINDOWS and path == default: + if IS_WINDOWS and path == default_dir: win_core_dir = os.path.splitdrive(path)[0] + "\\.platformio" if os.path.isdir(win_core_dir): path = win_core_dir diff --git a/tests/test_projectconf.py b/tests/test_projectconf.py index b1859c5d..2408463a 100644 --- a/tests/test_projectconf.py +++ b/tests/test_projectconf.py @@ -15,6 +15,7 @@ # pylint: disable=redefined-outer-name import os +import sys import pytest @@ -521,3 +522,36 @@ def test_dump(tmpdir_factory): ], ), ] + + +@pytest.mark.skipif(sys.platform != "win32", reason="runs only on windows") +def test_win_core_root_dir(tmpdir_factory): + try: + win_core_root_dir = os.path.splitdrive(fs.expanduser("~"))[0] + "\\.platformio" + remove_dir_at_exit = False + if not os.path.isdir(win_core_root_dir): + remove_dir_at_exit = True + os.makedirs(win_core_root_dir) + + # Default config + config = ProjectConfig() + assert config.get("platformio", "core_dir") == win_core_root_dir + + # Override in config + tmpdir = tmpdir_factory.mktemp("project") + tmpdir.join("platformio.ini").write( + """ +[platformio] +core_dir = ~/.pio + """ + ) + config = ProjectConfig(tmpdir.join("platformio.ini").strpath) + assert config.get("platformio", "core_dir") != win_core_root_dir + assert config.get("platformio", "core_dir") == os.path.realpath( + fs.expanduser("~/.pio") + ) + + if remove_dir_at_exit: + fs.rmtree(win_core_root_dir) + except PermissionError: + pass