Skip to content

Commit

Permalink
feat: fix: create-project & create_component with proper file permission
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan4yin committed Jul 17, 2023
1 parent 4fc2e5c commit 354e2c4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
12 changes: 10 additions & 2 deletions tools/idf_py_actions/create_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,11 @@ def is_empty_and_create(path: str, action: 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')
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)
Expand All @@ -49,7 +53,11 @@ def create_project(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, 'include', 'main.h'),
os.path.join(target_path, 'include', '.'.join((name, 'h'))))
Expand Down
14 changes: 14 additions & 0 deletions tools/test_build_system/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.'


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')
def test_docs_command(idf_py: IdfPyFunc) -> None:
logging.info('Check docs command')
Expand Down

0 comments on commit 354e2c4

Please sign in to comment.