dotfiles-remastered/.local/share/scripts/git-unpushed.sh

58 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env sh
# Thanks ChatGPT
# Define your projects directory
PROJECTS_DIR="$HOME/projects/"
# Counter for total directories checked
total_dirs_checked=0
# Counter for projects with unpushed commits
unpushed_projects=0
# Change directory to your projects directory
cd "$PROJECTS_DIR" || { echo "Directory not found"; exit 1; }
# Loop through each subdirectory
for dir in */; do
# Increment the total directories counter
((total_dirs_checked++))
# Move into the project directory
cd "$dir" || continue
# Check if it's a git repository
if [ -d ".git" ]; then
# Get the name of the current branch, silencing errors
current_branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
# Check if the command failed or if it's not a branch
if [ $? -ne 0 ] || [ -z "$current_branch" ]; then
cd ..
continue
fi
# Check if the branch has an upstream set
if [ -z "$(git rev-parse --abbrev-ref --symbolic-full-name "$current_branch@{u}" 2>/dev/null)" ]; then
#echo "No upstream set for $current_branch in $dir"
true # Hack cus i am lazy
else
# Check if there are unpushed commits
if [ "$(git rev-list --count HEAD..."$current_branch"@{u})" -gt 0 ]; then
echo "There are unpushed commits in $dir"
((unpushed_projects++))
fi
fi
fi
# Move back to the parent directory
cd ..
done
# Output the total number of directories checked
echo "Total directories checked: $total_dirs_checked"
# Output the number of projects with unpushed commits
echo "Projects with unpushed commits: $unpushed_projects"