Add script to get git status for all projects
This commit is contained in:
parent
90b64d8b50
commit
7b47fb4725
2 changed files with 72 additions and 0 deletions
71
.bin/projects-status
Executable file
71
.bin/projects-status
Executable 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'
|
|
@ -1,5 +1,6 @@
|
|||
.bin/host-backup-portalo
|
||||
.config/env.d/99-secrets
|
||||
.config/projectsrc
|
||||
.config/rclone/rclone.conf
|
||||
.local/share/atuin/key
|
||||
.ssh/config
|
||||
|
|
Loading…
Reference in a new issue