forked from espressif/esp-idf
feat: fix: create-project & create_component with proper file permission
This commit is contained in:
@@ -40,7 +40,11 @@ def is_empty_and_create(path: str, action: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def create_project(target_path: str, name: str) -> None:
|
def create_project(target_path: str, name: str) -> None:
|
||||||
copy_tree(os.path.join(os.environ['IDF_PATH'], 'examples', 'get-started', 'sample_project'), target_path)
|
copy_tree(
|
||||||
|
os.path.join(os.environ['IDF_PATH'], 'examples', 'get-started', 'sample_project'),
|
||||||
|
target_path,
|
||||||
|
preserve_mode=0,
|
||||||
|
)
|
||||||
main_folder = os.path.join(target_path, 'main')
|
main_folder = os.path.join(target_path, 'main')
|
||||||
os.rename(os.path.join(main_folder, 'main.c'), os.path.join(main_folder, '.'.join((name, 'c'))))
|
os.rename(os.path.join(main_folder, 'main.c'), os.path.join(main_folder, '.'.join((name, 'c'))))
|
||||||
replace_in_file(os.path.join(main_folder, 'CMakeLists.txt'), 'main', name)
|
replace_in_file(os.path.join(main_folder, 'CMakeLists.txt'), 'main', name)
|
||||||
@@ -49,7 +53,11 @@ def create_project(target_path: str, name: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def create_component(target_path: str, name: str) -> None:
|
def create_component(target_path: str, name: str) -> None:
|
||||||
copy_tree(os.path.join(os.environ['IDF_PATH'], 'tools', 'templates', 'sample_component'), target_path)
|
copy_tree(
|
||||||
|
os.path.join(os.environ['IDF_PATH'], 'tools', 'templates', 'sample_component'),
|
||||||
|
target_path,
|
||||||
|
preserve_mode=0,
|
||||||
|
)
|
||||||
os.rename(os.path.join(target_path, 'main.c'), os.path.join(target_path, '.'.join((name, 'c'))))
|
os.rename(os.path.join(target_path, 'main.c'), os.path.join(target_path, '.'.join((name, 'c'))))
|
||||||
os.rename(os.path.join(target_path, 'include', 'main.h'),
|
os.rename(os.path.join(target_path, 'include', 'main.h'),
|
||||||
os.path.join(target_path, 'include', '.'.join((name, 'h'))))
|
os.path.join(target_path, 'include', '.'.join((name, 'h'))))
|
||||||
|
@@ -237,6 +237,20 @@ def test_create_project(idf_py: IdfPyFunc, idf_copy: Path) -> None:
|
|||||||
assert ret.returncode == 4, 'Command create-project exit value is wrong.'
|
assert ret.returncode == 4, 'Command create-project exit value is wrong.'
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_project_with_idf_readonly(idf_copy: Path) -> None:
|
||||||
|
def change_to_readonly(src: Path) -> None:
|
||||||
|
for root, dirs, files in os.walk(src):
|
||||||
|
for name in dirs:
|
||||||
|
os.chmod(os.path.join(root, name), 0o555) # read & execute
|
||||||
|
for name in files:
|
||||||
|
path = os.path.join(root, name)
|
||||||
|
if '/bin/' in path: continue # skip excutables
|
||||||
|
os.chmod(os.path.join(root, name), 0o444) # readonly
|
||||||
|
logging.info('Check that command for creating new project will success if the IDF itself is readonly.')
|
||||||
|
change_to_readonly(idf_copy)
|
||||||
|
run_idf_py('create-project', '--path', str(idf_copy / 'example_proj'), 'temp_test_project')
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.usefixtures('test_app_copy')
|
@pytest.mark.usefixtures('test_app_copy')
|
||||||
def test_docs_command(idf_py: IdfPyFunc) -> None:
|
def test_docs_command(idf_py: IdfPyFunc) -> None:
|
||||||
logging.info('Check docs command')
|
logging.info('Check docs command')
|
||||||
|
Reference in New Issue
Block a user