From 6fae25b305d714b3ab7608fa003f1af9bf024545 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Tue, 14 Feb 2023 13:33:23 +0800 Subject: Rename tools into bin --- bin/git/check-repos.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 bin/git/check-repos.sh (limited to 'bin/git/check-repos.sh') diff --git a/bin/git/check-repos.sh b/bin/git/check-repos.sh new file mode 100755 index 0000000..5180fc9 --- /dev/null +++ b/bin/git/check-repos.sh @@ -0,0 +1,48 @@ +#! /bin/bash + +LIST=~/.repos +[[ $1 == -n ]] && { + COUNT_ONLY=true + count=0 +} + + +# Only works when file ~/.repos exists and readable +if [ ! -r $LIST ]; then + echo File ~/.repos not found/readable + exit 1 +fi + + +while read repo remote; do + [[ "$repo" =~ ^[[:space:]]*#.* ]] && continue + + # In case repo is consists of variable like $HOME + # Use eval to get git information + eval cd $repo 2>/dev/null || { + echo Repo $repo is inaccessible + exit 1 + } + + # Changes in working dir, not yet to be a commit + changes="$(git -c color.status=always status --short)" + + # Diff between from local repo and remote + cherry="$([ -n "`git remote`" ] && git cherry)" + + if [[ $COUNT_ONLY == true ]]; then + # If '-n' is specified, only count repo with changes/local-diff + [[ -n "$changes" || -n "$cherry" ]] && (( count++ )) + else + # Or, just print their status + echo Check $repo + [[ -n "$changes" ]] && echo "$changes" + [[ -n "$cherry" ]] && echo -e "\e[31m[ahead]\e[0m" + fi +done <$LIST + + +# If '-n' is specified, print number of repos with changes/local-diff +[[ $COUNT_ONLY == true ]] && echo $count + +exit 0 -- cgit v1.2.3-70-g09d2