better error checking for arguments and timeout

This commit is contained in:
Andrew Hurley 2022-12-26 12:18:10 +11:00
parent 4367f4b69b
commit dc6857fcdd
1 changed files with 39 additions and 7 deletions

46
vvv.sh
View File

@ -10,7 +10,7 @@ if [[ $(id -u) -ne "0" ]]; then
fi fi
usage () { usage () {
printf "Usage: vvv.sh <project>\n" printf "Usage: vvv.sh <options> <project>\n"
printf " project = Compose project folder.\n" printf " project = Compose project folder.\n"
printf " Option r: restore operation\n" printf " Option r: restore operation\n"
printf " Option d: keep containers down - don't bring back up\n" printf " Option d: keep containers down - don't bring back up\n"
@ -18,10 +18,10 @@ usage () {
RESTORE="false" RESTORE="false"
DOWN="false" DOWN="false"
OUTPUT="" OUTPUT=" Option: BACKUP OPERATION"
while getopts ':rd' OPT; do while getopts ':rd' OPT; do
case $OPT in case $OPT in
r) RESTORE="true"; OUTPUT="${OUTPUT} Option: RESTORE OPERATION";; r) RESTORE="true"; OUTPUT=" Option: RESTORE OPERATION";;
d) DOWN="true"; OUTPUT="${OUTPUT} Option: KEEP DOWN";; d) DOWN="true"; OUTPUT="${OUTPUT} Option: KEEP DOWN";;
\?) usage; exit;; \?) usage; exit;;
esac esac
@ -33,6 +33,18 @@ if [[ $RESTORE == "true" ]] && [[ ! -f docker-restore.sh ]]; then
exit 1 exit 1
fi fi
ccheck () {
printf "${OUTPUT}\n"
REPLY=$'\n'
timeout 10 bash -c 'read -r -s -N 1 -p "Starting delay of 10 seconds. Press 'Escape' or 'q' to cancel..."'
if [[ $REPLY != $'\n' ]]; then
printf "${OUTPUT} cancelled.\n"
return 1
else
printf "${OUTPUT} starting.\n"
fi
}
scripts () { scripts () {
for MODE in backup restore; do for MODE in backup restore; do
FILE="docker-${MODE}.sh" FILE="docker-${MODE}.sh"
@ -63,7 +75,7 @@ scripts () {
done done
} }
if [[ $# -lt 1 ]]; then if [[ ! $# -eq 1 ]]; then
usage usage
exit 1 exit 1
fi fi
@ -80,6 +92,14 @@ if [[ -z "$VOLUMES" ]]; then
exit 1 exit 1
fi fi
printf "${OUTPUT}\n"
if timeout --preserve-status --foreground 10 bash -c 'read -r -s -N 1 -p "Starting delay of 10 seconds. Press a key to cancel... "'; then
printf "cancelled\n"
exit 1
else
printf "starting\n"
fi
USER=$(stat -c '%u' $BASH_SOURCE) USER=$(stat -c '%u' $BASH_SOURCE)
pushd "../${PROJECT}" > /dev/null || exit 1 pushd "../${PROJECT}" > /dev/null || exit 1
@ -89,7 +109,11 @@ if [[ ! $RESTORE == "true" ]]; then
fi fi
for COMP in docker-compose*.yml; do for COMP in docker-compose*.yml; do
COMMAND="docker compose -f $COMP stop" if command -v docker-compose; then
COMMAND="docker-compose -f $COMP stop"
else
COMMAND="docker compose -f $COMP stop"
fi
printf "${COMMAND}\n" printf "${COMMAND}\n"
if ! bash -c "${COMMAND}"; then if ! bash -c "${COMMAND}"; then
printf "Services 'docker compose stop' error." printf "Services 'docker compose stop' error."
@ -98,7 +122,11 @@ for COMP in docker-compose*.yml; do
done done
for COMP in docker-compose*.yml; do for COMP in docker-compose*.yml; do
COMMAND="docker compose -f $COMP rm -f" if command -v docker-compose; then
COMMAND="docker-compose -f $COMP rm -f"
else
COMMAND="docker compose -f $COMP rm -f"
fi
printf "${COMMAND}\n" printf "${COMMAND}\n"
if ! bash -c "${COMMAND}"; then if ! bash -c "${COMMAND}"; then
printf "Services 'docker compose rm' error." printf "Services 'docker compose rm' error."
@ -112,7 +140,11 @@ else
bash "./docker-backup.sh" bash "./docker-backup.sh"
if [[ $DOWN = "false" ]]; then if [[ $DOWN = "false" ]]; then
for COMP in docker-compose*.yml; do for COMP in docker-compose*.yml; do
COMMAND="docker compose -f $COMP up -d" if command -v docker-compose; then
COMMAND="docker-compose -f $COMP up -d"
else
COMMAND="docker compose -f $COMP up -d"
fi
printf "${COMMAND}\n" printf "${COMMAND}\n"
if ! bash -c "${COMMAND}"; then if ! bash -c "${COMMAND}"; then
printf "Services 'up' error." printf "Services 'up' error."