| 100 | |
| 101 | |
| 102 | def merge_directory(src: Path, dst: Path, *, overwrite: bool) -> None: |
| 103 | if not src.exists(): |
| 104 | return |
| 105 | if overwrite: |
| 106 | shutil.copytree(src, dst, dirs_exist_ok=True) |
| 107 | return |
| 108 | for copied in src.rglob("*"): |
| 109 | relative = copied.relative_to(src) |
| 110 | target = dst / relative |
| 111 | if copied.is_dir(): |
| 112 | target.mkdir(parents=True, exist_ok=True) |
| 113 | continue |
| 114 | if target.exists(): |
| 115 | continue |
| 116 | target.parent.mkdir(parents=True, exist_ok=True) |
| 117 | shutil.copy2(copied, target) |
| 118 | |
| 119 | |
| 120 | def copy_if_exists(src: Path, dst: Path) -> None: |