|
84 | 84 | ok "Cleaned build artifacts" |
85 | 85 | fi |
86 | 86 |
|
| 87 | +# ── Helper: clean and remove old libs/mng* directories ──────────── |
| 88 | +cleanup_old_mng_dirs() { |
| 89 | + for d in libs/mng libs/mng_*; do |
| 90 | + [ -d "$d" ] || continue |
| 91 | + find "$d" -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true |
| 92 | + find "$d" -type d -name htmlcov -exec rm -rf {} + 2>/dev/null || true |
| 93 | + find "$d" -type d -name .pytest_cache -exec rm -rf {} + 2>/dev/null || true |
| 94 | + find "$d" -type d -name .test_output -exec rm -rf {} + 2>/dev/null || true |
| 95 | + find "$d" -name coverage.xml -delete 2>/dev/null || true |
| 96 | + find "$d" -name '.coverage' -delete 2>/dev/null || true |
| 97 | + find "$d" -path '*/.reviewer/outputs' -exec rm -rf {} + 2>/dev/null || true |
| 98 | + find "$d" -name '.stop_hook_consecutive_blocks' -delete 2>/dev/null || true |
| 99 | + find "$d" -depth -type d -empty -delete 2>/dev/null || true |
| 100 | + if [ -d "$d" ]; then |
| 101 | + if find "$d" -type f | read -r; then |
| 102 | + echo -e " ${YELLOW}WARNING: $d still has non-artifact files -- keeping it${NC}" |
| 103 | + else |
| 104 | + rm -rf "$d" |
| 105 | + ok "Removed $d" |
| 106 | + fi |
| 107 | + else |
| 108 | + ok "Removed $d" |
| 109 | + fi |
| 110 | + done |
| 111 | +} |
87 | 112 |
|
88 | 113 | # ── Helper: perl script for content replacement ─────────────────── |
89 | 114 | # Written to a temp file to avoid shell escaping issues with negative |
@@ -240,6 +265,18 @@ if [ -d ".mng" ] && [ ! -d ".mngr" ]; then |
240 | 265 | git mv ".mng" ".mngr" |
241 | 266 | ok ".mng -> .mngr" |
242 | 267 | fi |
| 268 | +elif [ -d ".mngr" ] && [ -d ".mng" ]; then |
| 269 | + # Both exist (e.g. after merging main reintroduces .mng/). |
| 270 | + # Copy any untracked files (local config like settings.local.toml) |
| 271 | + # from .mng/ to .mngr/ before removing .mng/. |
| 272 | + if [ "$DRY_RUN" = true ]; then |
| 273 | + dry "would copy untracked files from .mng/ to .mngr/ and remove .mng/" |
| 274 | + else |
| 275 | + cp -a -n .mng/. .mngr/ 2>/dev/null || true |
| 276 | + git rm -rf .mng 2>/dev/null || true |
| 277 | + rm -rf .mng |
| 278 | + ok "Merged .mng/ into .mngr/ and removed .mng/" |
| 279 | + fi |
243 | 280 | elif [ -d ".mngr" ]; then |
244 | 281 | ok "Already renamed" |
245 | 282 | fi |
@@ -270,6 +307,18 @@ for dir in libs/mng libs/mng_*; do |
270 | 307 | ok "$dir -> $newdir" |
271 | 308 | fi |
272 | 309 | renamed_libs=$((renamed_libs + 1)) |
| 310 | + elif [ -d "$dir" ] && [ -d "$newdir" ]; then |
| 311 | + # Both exist (after merging main reintroduces old paths). |
| 312 | + # Copy untracked files to new dir first, then remove old. |
| 313 | + if [ "$DRY_RUN" = true ]; then |
| 314 | + dry "would merge $dir into $newdir and remove $dir" |
| 315 | + else |
| 316 | + cp -a -n "$dir"/. "$newdir"/ 2>/dev/null || true |
| 317 | + git rm -rf "$dir" 2>/dev/null || true |
| 318 | + rm -rf "$dir" |
| 319 | + ok "Merged $dir into $newdir and removed" |
| 320 | + fi |
| 321 | + renamed_libs=$((renamed_libs + 1)) |
273 | 322 | fi |
274 | 323 | done |
275 | 324 | if [ "$renamed_libs" -eq 0 ]; then |
@@ -344,18 +393,8 @@ elif [ "$moved" -eq 0 ]; then |
344 | 393 | ok "No orphaned files" |
345 | 394 | fi |
346 | 395 |
|
347 | | -# Clean up empty leftover libs/mng* directories |
348 | | -for d in libs/mng libs/mng_*; do |
349 | | - [ -d "$d" ] || continue |
350 | | - if [ "$DRY_RUN" = true ]; then |
351 | | - dry "would remove $d" |
352 | | - elif find "$d" -type f | read -r; then |
353 | | - echo -e " ${YELLOW}WARNING: $d is not empty after cleanup -- keeping it${NC}" |
354 | | - else |
355 | | - rm -rf "$d" |
356 | | - ok "Removed $d" |
357 | | - fi |
358 | | -done |
| 396 | +# Clean up old dirs (first pass -- second pass runs after uv lock) |
| 397 | +cleanup_old_mng_dirs |
359 | 398 |
|
360 | 399 | # ── 5. Fix symlinks with stale targets ─────────────────────────── |
361 | 400 |
|
@@ -399,6 +438,20 @@ for file in "${symlinks[@]+"${symlinks[@]}"}"; do |
399 | 438 | fi |
400 | 439 | done |
401 | 440 |
|
| 441 | +# Also remove any broken symlinks with mng in the name (untracked, |
| 442 | +# left behind after merge brings in renamed versions) |
| 443 | +find "$REPO_ROOT" -maxdepth 2 -type l -name '*mng*' ! -name '*mngr*' | while IFS= read -r link; do |
| 444 | + if [ ! -e "$link" ]; then |
| 445 | + if [ "$DRY_RUN" = true ]; then |
| 446 | + dry "would remove broken symlink $link" |
| 447 | + else |
| 448 | + rm "$link" |
| 449 | + ok "Removed broken symlink $link" |
| 450 | + fi |
| 451 | + fixed_links=$((fixed_links + 1)) |
| 452 | + fi |
| 453 | +done |
| 454 | +
|
402 | 455 | if [ "$fixed_links" -eq 0 ]; then |
403 | 456 | ok "No symlinks needed fixing" |
404 | 457 | fi |
|
618 | 671 | skip "uv not found, skipping lock regeneration" |
619 | 672 | fi |
620 | 673 |
|
| 674 | +# Final cleanup: re-run after uv lock which can recreate __pycache__ |
| 675 | +cleanup_old_mng_dirs |
| 676 | +
|
621 | 677 | echo -e "\n${GREEN}${BOLD}Code migration complete.${NC}" |
622 | 678 | if [ "$DRY_RUN" = true ]; then |
623 | 679 | echo -e "${YELLOW}This was a dry run. No changes were made.${NC}" |
|
0 commit comments