From 6d1a60297af6acedda0f54ae87fafc7292fd745d Mon Sep 17 00:00:00 2001 From: M Starch Date: Mon, 13 Jan 2025 17:27:28 -0800 Subject: [PATCH] Adds a --populate flag (#15) * Adding --populate flag for existing directories * Black formatting --- src/fprime_bootstrap/__main__.py | 6 ++++++ src/fprime_bootstrap/bootstrap_project.py | 16 +++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/fprime_bootstrap/__main__.py b/src/fprime_bootstrap/__main__.py index a9e9b16..30ebd54 100644 --- a/src/fprime_bootstrap/__main__.py +++ b/src/fprime_bootstrap/__main__.py @@ -46,6 +46,12 @@ def main(): type=str, help="Version of F´ to checkout (default: latest release)", ) + project_parser.add_argument( + "--populate", + action="store_true", + default=False, + help="Populate an existing direcory with a new F´ project (default: False)", + ) clone_parser = subparsers.add_parser( "clone", help="Clone an existing remote F´ project" diff --git a/src/fprime_bootstrap/bootstrap_project.py b/src/fprime_bootstrap/bootstrap_project.py index 3069b77..ada27ed 100644 --- a/src/fprime_bootstrap/bootstrap_project.py +++ b/src/fprime_bootstrap/bootstrap_project.py @@ -45,14 +45,18 @@ def bootstrap_project(parsed_args: "argparse.Namespace"): target_dir = Path(parsed_args.path) # Ask user for project name project_name = ( - input(f"Project name ({DEFAULT_PROJECT_NAME}): ") or DEFAULT_PROJECT_NAME + (input(f"Project name ({DEFAULT_PROJECT_NAME}): ") or DEFAULT_PROJECT_NAME) + if not parsed_args.populate + else target_dir.name ) check_project_name(project_name) - project_path = target_dir / project_name + project_path = target_dir / project_name if not parsed_args.populate else target_dir try: - generate_boilerplate_project(project_path, project_name) + generate_boilerplate_project( + project_path, project_name, populate=parsed_args.populate + ) setup_git_repo(project_path, parsed_args.tag) if not parsed_args.no_venv: setup_venv(project_path) @@ -178,11 +182,13 @@ def setup_git_repo(project_path: Path, tag: str): sys.exit(1) -def generate_boilerplate_project(project_path: Path, project_name: str): +def generate_boilerplate_project( + project_path: Path, project_name: str, populate: bool = False +): """Generates a new project""" source = Path(__file__).parent / "templates/fprime-project-template" # copy files from template into target path - shutil.copytree(source, project_path) + shutil.copytree(source, project_path, dirs_exist_ok=populate) # Iterate over all template files and replace {{FPRIME_PROJECT_NAME}} placeholder with project_name for file in project_path.rglob("*-template"):