1
0
Fork 0
pomodoro/bash_scripts/repo_compose.sh
2024-09-01 08:46:27 +03:00

84 lines
3.7 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "Создание скриптов из шаблонов с параметрами и сохранение их в каталогах проектов."
export remote="git.org.ru" && source info_param.sh
export basedir="$PWD" # текущая папка
# обновление списка исключений
function update_gitignore {
# добавляем исключение в список ".gitignore", если оно ещё не добавлено
if [ ! -f "$1/.gitignore" ] || [ "$(grep -cx "\.repo_\*" "$1/.gitignore")" == 0 ]; then
echo ".repo_*" >>"$1/.gitignore"
echo "Обновлён файл: $1/.gitignore"
fi
}
# создание скриптов из шаблонов с параметрами
function compose {
echo "Обработка: $1"
update_gitignore "$1"
# параметры для шаблонов
dir="${1##*/}"
owner="golovin"
repo="$dir"
description=""
if [[ "$dir" =~ "pomodoro" ]]; then
if [[ "$dir" =~ [[:digit:]] ]]; then
owner="pomodoro"
repo="${dir//[^[:digit:]]/}"
case "$repo" in
"1") description="Трёхмерная графика на JavaScript" ;;
"2") description="Декартово произведение, комбинаторика" ;;
"3") description="Умножение матриц и повороты" ;;
"4") description="Практическая философия, поэзия и юмор" ;;
"5") description="Рисуем картинки текстом" ;;
"6") description="Пустой" ;;
*) return ;; # шесть помидорных вёб-сайтов
esac
description+=" — https://$owner$repo.mircloud.ru"
else
description="Описание и оглавление"
fi
elif [[ "$dir" =~ "color-tomato" ]]; then
description="Тема оформления / Цветной помидор"
elif [[ "$dir" =~ "older-tomato" ]]; then
description="Тема оформления / Старый помидор"
fi
wiki="" # оглавление по страницам вёб-сайта
if [ -f "$dir/WIKI.md" ]; then
if [ "$remote" == "hub.mos.ru" ]; then
wiki="$(uni2ascii -aU -qpsn "$dir/WIKI.md")"
else
wiki="$(basenc "$dir/WIKI.md" --base64 -w0)"
fi
fi
# скрипт для создания удалённого репозитория
{
echo "#!/bin/bash"
echo "remote=\"$remote\""
echo "owner=\"$owner\""
echo "user=\"golovin\""
echo "repo=\"$repo\""
echo "description=\"$description\""
echo "wiki=\"$wiki\""
if [ "$remote" == "hub.mos.ru" ]; then
echo "token=\"$(cat "$basedir/.token_gitlab")\""
cat "$basedir/repo_gitlab.tmpl.sh"
else
echo "token=\"$(cat "$basedir/.token_gitea")\""
cat "$basedir/repo_gitea.tmpl.sh"
fi
} >"$dir/.repo_remote.sh" && chmod +x "$dir/.repo_remote.sh"
# скрипт для создания локального репозитория
{
echo "#!/bin/bash"
echo "remote=\"$remote\""
echo "owner=\"$owner\""
echo "repo=\"$repo\""
echo "dir=\"$dir\""
cat "$basedir/repo_local.tmpl.sh"
} >"$dir/.repo_local.sh" && chmod +x "$dir/.repo_local.sh"
}
export -f compose update_gitignore
cd ../.. # выходим из папки и из репозитория
time_ms="$(date '+%s%3N')"
# запуск параллельной обработки всех репозиториев, расположенных на одном уровне с текущим, кроме папки ".idea"
find . -mindepth 1 -maxdepth 1 -type d -not -name ".idea" -print0 | xargs -I{} -n1 -0 -P0 bash -c 'compose "{}"'
echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$time_ms")) мс."