#!/bin/bash # shellcheck disable=SC2016 usage() { cat << EOT Usage: ./${0##*/} ls|update|clone|save Commands: ls -> List all the bundle repos update -> Update all the bundle repos clone -> Use 'bundles.txt' to repopulate save -> Save repos to 'bundles.txt' EOT exit } colors() { sed -E -e 's/\[red\]//g' \ -e 's/\[green\]//g' \ -e 's/\[reset\]//g' \ -e 's/\[b\]//g' \ -e 's/\[ul\]//g' } repos() { # Eval "$1" for all directories local dn for dn in * ; do [[ -d "$dn" && -d "$dn/.git" ]] || continue eval "${1//@@/$dn}" | colors done } clone_bundles() { # Clone the bundles in 'bundles.txt' local dn repo while read -r dn repo ; do if [[ -d "$dn" ]]; then echo "*** Dir [red][$dn][reset] already exists!" | colors else git clone "$repo" "$dn" 2>&1 | sed "s|^|[green][$dn][reset] |g" | colors fi done < bundles.txt } case "$1" in ls) repos 'echo -e "[red]@@[reset] [green]$(git -C @@ remote get-url origin)[reset]"' ;; update) repos 'git -C @@ pull 2>&1 | sed "s|^|[green][@@][reset] |g"' ;; save) repos 'echo -e "@@ $(git -C @@ remote get-url origin)"' | tee bundles.txt ;; clone) clone_bundles ;; ?*) echo "Unknown command: $1" ;; *) usage ;; esac # Fin.