Add project.helpers.get_project_all_lib_dirs API (used by platformio-node-helpers)

This commit is contained in:
Ivan Kravets
2021-10-26 14:36:18 +03:00
parent 6399de7a66
commit 1174958e8b
4 changed files with 57 additions and 4 deletions

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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