46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
"""Экспорт виртуальных файлов агента в реальную файловую систему."""
|
|
from __future__ import annotations
|
|
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
|
|
def export_virtual_files(
|
|
workspace_dir: Path,
|
|
output_dir: Path,
|
|
*,
|
|
clear_output: bool = True,
|
|
) -> list[str]:
|
|
"""Копирует все файлы из workspace агента в output_dir.
|
|
|
|
Returns:
|
|
Список относительных путей экспортированных файлов.
|
|
"""
|
|
workspace_dir = workspace_dir.resolve()
|
|
output_dir = output_dir.resolve()
|
|
output_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
if clear_output:
|
|
for child in output_dir.iterdir():
|
|
if child.is_dir():
|
|
shutil.rmtree(child)
|
|
else:
|
|
child.unlink()
|
|
|
|
exported: list[str] = []
|
|
if not workspace_dir.exists():
|
|
return exported
|
|
|
|
for src in workspace_dir.rglob("*"):
|
|
if not src.is_file():
|
|
continue
|
|
rel = src.relative_to(workspace_dir)
|
|
if rel.parts and rel.parts[0] == ".git":
|
|
continue
|
|
dest = output_dir / rel
|
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
shutil.copy2(src, dest)
|
|
exported.append(str(rel).replace("\\", "/"))
|
|
|
|
return exported
|