git_list_unmerged_branches.sh (1829B)
#!/bin/bash function check_unmerged_git_branches() { GIT_DIR=$1 EMAIL=$2 if [ -z $GIT_DIR ]; then echo "Must specify the path of a git repo" return 1 fi if [ -z $EMAIL ]; then echo "Must specify recipient(s)" return 1 fi if [ ! -d "$GIT_DIR/.git" ]; then echo "Directory is not a git repo: $GIT_DIR" return 1 fi THIS_DIR=$(echo $PWD); THIS_SCRIPT=$(echo $PWD | sed -E 's/(.*[^a-z\-])?([a-z\-]{1,}).*/\2/'); #name of the directory this script is in - this makes sense if the directory name is more relevant and the script itself is just named something like "run" NOW=$(date +%Y%m%d) if [ -f ./branches.txt ]; then rm ./branches.txt; fi if [ -f ./branches_results.txt ]; then rm ./branches_results.txt; fi cd $GIT_DIR; for branch in $(git branch -r --no-merged | grep -v "HEAD"); do echo -e $branch"," $(git log --no-merges -n1 --format="%ct, %ci, %cr, %an, %ae" $branch | head -n1) | xargs echo >> "$THIS_DIR/branches.txt"; done cd $THIS_DIR; echo -e "Unmerged old branches check\nThis script checks for any un-merged branches on the remote that are older than 30 days.\n\n" >> ./branches_results.txt cat ./branches.txt | awk 'BEGIN{FS=","; prev_month_stamp=(systime() - 30 * 24 * 60 * 60);}{if($2 > prev_month_stamp){next;} else {print $0;}}' >> ./branches_results.txt; cat << EOF >> branches_results.txt Please check if you have any unmerged branches in the remote repository, and either merge them or delete them. ------------------------------------------------------------------------------------------- Generated by ${THIS_SCRIPT} EOF cat ./branches_results.txt | mail -s "[INFO]: Unmerged old branches check @ ${NOW}" "$EMAIL" }