Files
ShadowArch/UserScripts/pruneable-branches

90 lines
2.3 KiB
Plaintext
Raw Permalink Normal View History

#!/bin/bash
# File: pruneable-branches
#
# Description: This file helps find pruneable branches.
#
2026-01-14 13:55:57 -06:00
# Package: AniNIX/ShadowArch
# Copyright: WTFPL
#
# Author: DarkFeather <ircs://irc.aninix.net:6697/DarkFeather>
source /usr/share/git/git-prompt.sh
function checkBranches() {
### Check the local branches for any potential cleanup
### param whitelist: branches to ignore
### param remove (optional): should we do the cleanup.
unset removeable whitelist
whitelist="$1"
removeable="$2"
if [ -n "$whitelist" ]; then
whitelist="${whitelist}|$(__git_ps1 '%s')"
else
whitelist="$(__git_ps1 '%s')"
fi
# Iterate on branches
for branch in $(git branch -l | grep -v "$whitelist"); do
branchHead="$(git rev-parse "$branch")"
# If the branch is in the log for the current branch, it's actionable.
if (git log | grep "$branchHead" 1>/dev/null); then
if [ -n "$removeable" ]; then
git branch -d "$branch"
else
echo "$branch has been merged."
fi
# If remote also exists, then we should deal with that too.
if (git branch -r -l | grep "$branch" 1>/dev/null); then
if [ -n "$removeable" ]; then
git push --delete origin "$branch"
else
echo ' * Remote branch can be pruned.'
fi
fi
if [ -z "$removeable" ]; then
git log -n1 "$branch"
fi
fi
done
}
function Usage() {
### Show help
echo "WARNING: This should only be run on the protected branch."
echo "Usage: $0 -h"
echo " $0"
echo " $0 -r [ -w branch,branch... ]"
echo Add -w to include a comma-separated list of whitelisted branches.
echo i.e. -w release,develop
}
function main() {
### Main operation
unset removeable
whitelist=""
while getopts 'hrvw:' OPTION; do
case "$OPTION" in
h) Usage 0 ;;
r) removeable=1 ;;
v) set -x ;;
w) whitelist="$( echo "${OPTARG}" | sed 's/,$//' | tr ',' '|')" ;;
*) Usage 1 ;;
esac
done
checkBranches "$whitelist" $removeable
}
# Allow sourcing
if [ "$(basename "$0")" == "pruneable-branches" ]; then
main $@
fi