56 lines
1.3 KiB
Bash
Executable File
56 lines
1.3 KiB
Bash
Executable File
#!/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\]/[31m/g' \
|
||
-e 's/\[green\]/[32m/g' \
|
||
-e 's/\[reset\]/[0m/g' \
|
||
-e 's/\[b\]/[1m/g' \
|
||
-e 's/\[ul\]/[4m/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.
|