You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.9 KiB
Bash
91 lines
1.9 KiB
Bash
#!/bin/bash
|
|
|
|
blue='\033[0;34m'
|
|
cyan='\033[0;36m'
|
|
nc="\033[0m" # no color
|
|
|
|
HELP=$(
|
|
cat <<EOF
|
|
|
|
This script helps one check if the remotes have had any changes and do something about it.
|
|
Useful if one has a bunch of repos.
|
|
|
|
Usages:
|
|
#0: ${0} <flag(s)>
|
|
Arguments:
|
|
-h,--help,-?,? See this message.
|
|
-v,--verbose Print verbose output in case remotes have had changes.
|
|
-p,--pull Pull all changes from all remotes (if any).
|
|
-f,--force Force pull.
|
|
EOF
|
|
)
|
|
|
|
function parse_args() {
|
|
while [[ $# -gt 0 ]]; do
|
|
case "${1}" in
|
|
-v | --verbose)
|
|
verbose=true
|
|
shift 1
|
|
;;
|
|
-p | --pull)
|
|
pull=true
|
|
shift 1
|
|
;;
|
|
-f | --force)
|
|
force=true
|
|
shift 1
|
|
;;
|
|
-h | --help | -? | ?)
|
|
printf "%s\n" "$HELP"
|
|
exit 0
|
|
;;
|
|
*)
|
|
printf "Try '%s --help' for more information\n" "${0}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
function perform() {
|
|
for file in *; do
|
|
[[ -d ${file} ]] && {
|
|
printf "${blue}Checking ${cyan}%s${nc}...\t\t" "${file}"
|
|
diff_sum="$(git -C ${file} diff --compact-summary origin/main)"
|
|
|
|
[[ ${?} == 0 ]] && {
|
|
state="🟢"
|
|
if [[ ${diff_sum} != "" ]]; then
|
|
state="🔴"
|
|
if [[ ${verbose} == "true" ]]; then state="\\n${diff_sum}"; fi
|
|
fi
|
|
|
|
printf "${state}\n"
|
|
|
|
[[ ${pull} == "true" ]] && {
|
|
if [[ $(git -C ${file} status --porcelain) ]]; then
|
|
if [[ "force" == "true" ]]; then
|
|
printf "\n-->Force pulling updates...\n"
|
|
git -C "${file}" fetch --all
|
|
git -C "${file}" reset --hard
|
|
else
|
|
printf "\n-->Pulling updates...\n"
|
|
git -C "${file}" pull --all
|
|
fi
|
|
fi
|
|
}
|
|
}
|
|
|
|
}
|
|
done
|
|
}
|
|
|
|
main() {
|
|
if [[ "$#" -gt 0 ]]; then
|
|
parse_args "$@"
|
|
fi
|
|
perform
|
|
}
|
|
|
|
main "$@"
|