Add script to get git status for all projects

This commit is contained in:
Tobias Reisinger 2024-06-24 19:40:42 +02:00
parent 90b64d8b50
commit 7b47fb4725
Signed by: serguzim
GPG key ID: 13AD60C237A28DFE
2 changed files with 72 additions and 0 deletions

71
.bin/projects-status Executable file
View file

@ -0,0 +1,71 @@
#!/usr/bin/env bash
print_in_color() {
local color="$1"
shift
if [[ -z ${NO_COLOR+x} ]]; then
printf "$color%b\e[0m\n" "$*"
else
printf "%b\n" "$*"
fi
}
red() { print_in_color "\e[31m" "$*"; }
green() { print_in_color "\e[32m" "$*"; }
projectsrc="$HOME/.config/projectsrc"
_print_project_status () {
project="$1"
cd "$HOME/$project" || return
branch=$(git branch --show-current)
if [ -z "$branch" ]; then
return
fi
remote="origin"
remotes=$(git remote)
if ! echo "$remotes" | grep -q "^$remote$"; then
remote=$(echo "$remotes" | head -n 1)
fi
ahead=$(git rev-list --count "$remote/$branch"..HEAD)
if [ "$ahead" -eq 0 ]; then
ahead=$(green "$ahead")
else
ahead=$(red "$ahead")
project=$(red "$project")
fi
dirty=$(git status --porcelain | wc -l)
if [ "$dirty" -eq 0 ]; then
dirty=$(green "$dirty")
else
dirty=$(red "$dirty")
project=$(red "$project")
fi
printf "%s\t%s\t%s\t%s\n" \
"$project" \
"$branch" \
"$ahead" \
"$dirty"
}
_print_projects_status () {
while read -r next_project
do
if [ -z "$next_project" ]; then
continue
fi
if [ ! -d "$HOME/$next_project" ]; then
continue
fi
_print_project_status "$next_project"
done < "$projectsrc"
}
_print_projects_status | column -t -s$'\t' --table-columns 'Project,Branch,Ahead,Dirty Files'

View file

@ -1,5 +1,6 @@
.bin/host-backup-portalo .bin/host-backup-portalo
.config/env.d/99-secrets .config/env.d/99-secrets
.config/projectsrc
.config/rclone/rclone.conf .config/rclone/rclone.conf
.local/share/atuin/key .local/share/atuin/key
.ssh/config .ssh/config