mirror of
https://github.com/github/awesome-copilot.git
synced 2026-04-11 02:35:55 +00:00
81 lines
1.5 KiB
Bash
Executable File
81 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage: bash scripts/delete-gone-branches.sh [--apply]
|
|
|
|
Find local branches whose upstream is marked "[gone]" and delete them.
|
|
|
|
Options:
|
|
--apply Actually delete the branches with `git branch -D`
|
|
--help Show this help text
|
|
|
|
Without --apply, the script prints what it would delete.
|
|
EOF
|
|
}
|
|
|
|
apply=false
|
|
|
|
case "${1:-}" in
|
|
"")
|
|
;;
|
|
--apply)
|
|
apply=true
|
|
;;
|
|
--help|-h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1" >&2
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
git fetch --prune --quiet
|
|
|
|
mapfile -t gone_branches < <(
|
|
git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads |
|
|
while IFS= read -r line; do
|
|
branch=${line% *}
|
|
tracking=${line#"$branch "}
|
|
if [[ "$tracking" == "[gone]" ]]; then
|
|
printf '%s\n' "$branch"
|
|
fi
|
|
done
|
|
)
|
|
|
|
if [[ ${#gone_branches[@]} -eq 0 ]]; then
|
|
echo "No local branches with gone upstreams found."
|
|
exit 0
|
|
fi
|
|
|
|
current_branch="$(git branch --show-current)"
|
|
|
|
echo "Found ${#gone_branches[@]} branch(es) with gone upstreams:"
|
|
printf ' %s\n' "${gone_branches[@]}"
|
|
|
|
if [[ "$apply" != true ]]; then
|
|
echo
|
|
echo "Dry run only. Re-run with --apply to delete them."
|
|
exit 0
|
|
fi
|
|
|
|
deleted_count=0
|
|
|
|
for branch in "${gone_branches[@]}"; do
|
|
if [[ "$branch" == "$current_branch" ]]; then
|
|
echo "Skipping current branch: $branch"
|
|
continue
|
|
fi
|
|
|
|
git branch -D "$branch"
|
|
deleted_count=$((deleted_count + 1))
|
|
done
|
|
|
|
echo
|
|
echo "Deleted $deleted_count branch(es)."
|