| # Copyright 2026 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import shlex |
| import shutil |
| import subprocess |
| import sys |
| from typing import Any |
| |
| from utils import run_fx |
| from worktree_pool import WorktreePool |
| |
| |
| def run(args: Any, pool: WorktreePool) -> None: |
| wt = pool.add_worktree(args.name) |
| |
| symlink_local = getattr(args, "symlink_local", False) |
| copy_local = getattr(args, "copy_local", False) |
| |
| if symlink_local or copy_local: |
| src_local = pool.fuchsia_dir / "local" |
| if not src_local.exists(): |
| print( |
| f"Error: 'local' directory not found at {src_local}", |
| file=sys.stderr, |
| ) |
| sys.exit(1) |
| |
| dest_local = wt.path / "local" |
| |
| if symlink_local: |
| try: |
| dest_local.symlink_to(src_local) |
| print(f"Symlinked {src_local} to {dest_local}") |
| except Exception as e: |
| print(f"Error creating symlink: {e}", file=sys.stderr) |
| sys.exit(1) |
| elif copy_local: |
| try: |
| print(f"Copying {src_local} to {dest_local}...") |
| shutil.copytree(src_local, dest_local, symlinks=True) |
| print("Copy complete.") |
| except Exception as e: |
| print(f"Error copying directory: {e}", file=sys.stderr) |
| sys.exit(1) |
| |
| if args.set is not None: |
| for s in args.set: |
| set_args = shlex.split(s) |
| try: |
| run_fx(wt.path, ["set"] + set_args, check=True) |
| except FileNotFoundError as e: |
| print(f"Warning: {e}, cannot run fx set", file=sys.stderr) |
| except subprocess.CalledProcessError as e: |
| print(f"Failed to run fx set '{s}': {e}", file=sys.stderr) |
| sys.exit(1) |