git-update-repos (937 bytes)
1 #!/bin/sh 2 # Update all git repos in directory tree 3 dir=${1:-"."} 4 results=$(mktemp) 5 trap 'rm -f "$results"' EXIT 6 echo "Updating repos in: $dir" 7 find "$dir" -name .git -type d -prune -print0 2>/dev/null | 8 xargs -0 -P 8 -I{} "$(dirname "$0")/git-update-worker.sh" {} "$results" 9 conflicts=$(grep -c "^REBASE_CONFLICT:" "$results") 10 echo "CHANGES:" 11 sed -n 's/^UPDATED://p' "$results" | while IFS='|' read -r repo changelog; do 12 repo_name=${repo#"$dir"/} 13 printf '\033[32m%s:\033[0m\n' "$repo_name" 14 printf '%s\n' "$changelog" | tr ';' '\n' | sed 's/^/ /' | sed 's/^ $//' 15 done 16 if [ "$conflicts" -gt 0 ]; then 17 printf '\033[31mREBASE CONFLICTS:\033[0m\n' 18 sed -n 's/^REBASE_CONFLICT://p' "$results" | while IFS='|' read -r repo _; do 19 repo_name=${repo#"$dir"/} 20 printf '\033[31m%s: requires manual resolution\033[0m\n' "$repo_name" 21 done 22 notify-send "Git Rebase Conflicts" "$conflicts repos need manual resolution" -u critical -t 10000 23 fi