61 lines
4.6 KiB
Bash
Executable file
61 lines
4.6 KiB
Bash
Executable file
#!/bin/bash
|
||
echo "Публикация оглавлений вёб-сайтов на сервере codeberg."
|
||
# выполнение скрипта внутри каталога вёб-сайта
|
||
function profile2 {
|
||
dir="pomodoro" && red="\e[91m" && green="\e[92m" && yellow="\e[93m" && norm="\e[0m"
|
||
# соответствующая строка для вывода сообщений по ходу выполнения функции
|
||
case "$1" in "") dir="$dir " && num="6" ;; *) dir="$dir${1}" && num="$((6 - ${1}))" ;; esac
|
||
pre="\e[${num}A${dir} " && aft="\e[K\e[${num}B\r"
|
||
cd "${dir// /}" || { printf "${pre}${red}%s${norm} %s${aft}" "[•••••••]" "Не найден каталог." && return 1; }
|
||
printf "${pre}%s %s${aft}" "[•••••••]" "Пересоздание файлов в каталоге."
|
||
./.repo_profile2.sh "prepare" &>/dev/null
|
||
for ((ms1 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms1 < 600000; pass = 0)); do
|
||
# 1 Создание удалённого репозитория и контроль корректности ответов от сервера
|
||
for ((ms2 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms2 < 20000; remote = 0)); do
|
||
[ "$pass" != 0 ] && printf "${pre}%s %s${aft}" "[#••••••]" "Удаление старого репозитория на сервере."
|
||
./.repo_profile2.sh "delete" &>/dev/null
|
||
printf "${pre}%s %s${aft}" "[##•••••]" "Создание нового репозитория в группе."
|
||
./.repo_profile2.sh "create" &>/dev/null || continue
|
||
printf "${pre}%s %s${aft}" "[###••••]" "Изменение свойств репозитория."
|
||
./.repo_profile2.sh "patch" &>/dev/null || continue
|
||
printf "${pre}%s %s${aft}" "[####•••]" "Добавление аватарки для репозитория."
|
||
./.repo_profile2.sh "avatar" &>/dev/null || continue
|
||
remote=1 && break # завершение цикла
|
||
done
|
||
case "$remote" in
|
||
1) printf "${pre}%s %s${aft}" "[#####••]" "Создание локального репозитория." ;;
|
||
*) printf "${pre}${red}%s${norm} %s${aft}" "[•••••••]" "Создание на сервере более 20 секунд." && continue ;;
|
||
esac
|
||
# 2 Создание локального репозитория и отправка данных на сервер
|
||
./.repo_profile2.sh "local" &>/dev/null
|
||
printf "${pre}%s %s${aft}" "[######•]" "Отправка локальных данных на сервер."
|
||
./.repo_profile2.sh "push" &>/dev/null
|
||
# 3 Проверка корректности получения данных на сервере
|
||
printf "${pre}%s %s${aft}" "[#######]" "Проверка получения данных на сервере."
|
||
for ((lap = 1, ms2 = "$(date '+%s%3N')"; $(date '+%s%3N') - ms2 < 20000; lap++, testing = 0)); do
|
||
track=7 && shift="$(tr -d '-' <<<$((lap / track % 2 * track - lap % track)))"
|
||
progressbar="$(printf "[%$((track - shift))s" | sed 's| |•|g')$(printf "%${shift}s]" | sed 's| |#|g')"
|
||
./.repo_profile2.sh "testing" &>/dev/null \
|
||
|| { printf "${pre}${yellow}%s${norm} %s${aft}" "$progressbar" "Ожидание данных на сервере." && continue; }
|
||
testing=1 && break # завершение цикла
|
||
done
|
||
case "$testing" in
|
||
1) pass=1 && break ;;
|
||
*) printf "${pre}${red}%s${norm} %s${aft}" "[•••••••]" "Проверка данных более 20 секунд." ;;
|
||
esac
|
||
done
|
||
case "$pass" in
|
||
1) printf "${pre}${green}%s${norm} %s${aft}" "[#######]" "Выполнено." ;;
|
||
*) printf "${pre}${red}%s${norm} %s${aft}" "[•••••••]" "Ожидание более 10 минут." ;;
|
||
esac
|
||
}
|
||
export -f profile2
|
||
cd ../.. # выход из папки и из репозитория
|
||
time_ms="$(date '+%s%3N')"
|
||
# смещение курсора вниз на соответствующее количество строк
|
||
printf 'pomodoro%s\n' "" {1..5}
|
||
# вывод номеров вёб-сайтов и параллельный запуск функции для каждого
|
||
printf 'profile2 "%s"\0' "" {1..5} | xargs -n1 -0 -P0 bash -c
|
||
# замер продолжительности выполнения в миллисекундах, пересчёт в минуты, секунды и миллисекунды
|
||
tms="$(($(date '+%s%3N') - time_ms))" && min="$((tms / 1000 / 60))" && sec="$((tms / 1000 % 60))"
|
||
ms="$((tms % 1000))" && printf 'Общее время выполнения: %02d:%02d.%03d мс.\n' "$min" "$sec" "$ms"
|