Files
OmniRoute/scripts/ops/prune-stale-worktrees.sh
Diego Rodrigues de Sa e Souza 7f5b1e4d83 ci(quality): shift heavy validations to the PR→release fast-path (release-acceleration) (#4857)
* feat(quality): add check:test-runner-api gate (vitest-only dirs must use vitest API)

* feat(release): reusable CHANGELOG i18n-mirror sync script

* chore(ops): add prune-stale-worktrees.sh (dry-run by default)

* ci(quality): run test-runner-api + docs-all + vitest + full unit suite on PR->release fast-path

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
2026-06-23 20:16:23 -03:00

32 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Lista (ou remove com --apply) worktrees port-* cuja branch já foi merged ao
# main OU não tem commits à frente do origin/main. NUNCA toca worktrees com
# trabalho não-commitado. Rodar a partir do checkout principal.
set -euo pipefail
APPLY="${1:-}"
git fetch origin main --quiet || true
git worktree list --porcelain | awk '/^worktree /{w=$2} /^branch /{print w" "$2}' | \
while read -r dir ref; do
case "$dir" in
*"/.claude/worktrees/"*port-*|*"/.worktrees/"*port-*) ;;
*) continue ;;
esac
br="${ref#refs/heads/}"
if [ -n "$(git -C "$dir" status --porcelain 2>/dev/null)" ]; then
echo "SKIP (dirty): $dir"
continue
fi
ahead=$(git -C "$dir" rev-list --count origin/main.."$br" 2>/dev/null || echo "?")
if [ "$ahead" = "0" ]; then
if [ "$APPLY" = "--apply" ]; then
git worktree remove --force "$dir" && git branch -D "$br" 2>/dev/null || true
echo "REMOVED: $dir ($br)"
else
echo "WOULD REMOVE (0 ahead of main): $dir ($br)"
fi
else
echo "KEEP ($ahead ahead): $dir ($br)"
fi
done
echo "Done.${APPLY:+ (applied)}"