94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
"""
|
|
Sync Gherkin feature files from album/book/gherkin-samples/ to tester/features/.
|
|
"""
|
|
|
|
import shutil
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
|
|
def sync_features_from_album(
|
|
album_path: Optional[Path] = None,
|
|
tester_path: Optional[Path] = None
|
|
) -> dict:
|
|
"""
|
|
Sync .feature files from album/book/gherkin-samples/ to ward/tools/tester/features/.
|
|
|
|
Args:
|
|
album_path: Path to album/book/gherkin-samples/ (auto-detected if None)
|
|
tester_path: Path to ward/tools/tester/features/ (auto-detected if None)
|
|
|
|
Returns:
|
|
Dict with sync stats: {synced: int, skipped: int, errors: int}
|
|
"""
|
|
# Auto-detect paths if not provided
|
|
if tester_path is None:
|
|
tester_path = Path(__file__).parent.parent / "features"
|
|
|
|
if album_path is None:
|
|
# Attempt to find album in pawprint
|
|
pawprint_root = Path(__file__).parent.parent.parent.parent
|
|
album_path = pawprint_root / "album" / "book" / "gherkin-samples"
|
|
|
|
# Ensure paths exist
|
|
if not album_path.exists():
|
|
return {
|
|
"synced": 0,
|
|
"skipped": 0,
|
|
"errors": 1,
|
|
"message": f"Album path not found: {album_path}"
|
|
}
|
|
|
|
tester_path.mkdir(parents=True, exist_ok=True)
|
|
|
|
# Sync stats
|
|
synced = 0
|
|
skipped = 0
|
|
errors = 0
|
|
|
|
# Find all .feature files in album
|
|
for feature_file in album_path.rglob("*.feature"):
|
|
# Get relative path from album root
|
|
relative_path = feature_file.relative_to(album_path)
|
|
|
|
# Destination path
|
|
dest_file = tester_path / relative_path
|
|
|
|
try:
|
|
# Create parent directories
|
|
dest_file.parent.mkdir(parents=True, exist_ok=True)
|
|
|
|
# Copy file
|
|
shutil.copy2(feature_file, dest_file)
|
|
synced += 1
|
|
|
|
except Exception as e:
|
|
errors += 1
|
|
|
|
return {
|
|
"synced": synced,
|
|
"skipped": skipped,
|
|
"errors": errors,
|
|
"message": f"Synced {synced} feature files from {album_path}"
|
|
}
|
|
|
|
|
|
def clean_features_dir(features_dir: Optional[Path] = None):
|
|
"""
|
|
Clean the features directory (remove all .feature files).
|
|
|
|
Useful before re-syncing to ensure no stale files.
|
|
"""
|
|
if features_dir is None:
|
|
features_dir = Path(__file__).parent.parent / "features"
|
|
|
|
if not features_dir.exists():
|
|
return
|
|
|
|
# Remove all .feature files
|
|
for feature_file in features_dir.rglob("*.feature"):
|
|
try:
|
|
feature_file.unlink()
|
|
except Exception:
|
|
pass
|