84 lines
3.7 KiB
Bash
Executable file
84 lines
3.7 KiB
Bash
Executable file
#!/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")) мс."
|