Создание проекта

This commit is contained in:
RedHood 2020-07-19 16:58:10 +10:00
commit 3c27697905

397
gitler.fish Normal file
View File

@ -0,0 +1,397 @@
#!/usr/bin/fish
if test (string match -ri "ru" "$LANG")
function help -d "Вывод мануала по работе с программой"
echo
set_color yellow; echo -n " Шаблон: "; set_color white; echo -n " gitler "; set_color brmagenta; echo "[репозиторий] [флаги]"
echo
set_color green; echo -n " -c --create "; set_color brcyan; echo -n ": "; set_color white; echo "Создать репозиторий"
set_color green; echo -n " -d --delete "; set_color brcyan; echo -n ": "; set_color white; echo "Удалить репозиторий"
set_color green; echo -n " -f --force "; set_color brcyan; echo -n ": "; set_color white; echo "Перезаписывать или игнорировать, если потребуется"
set_color green; echo -n " -p --path "; set_color brmagenta; echo -n "[путь] "; set_color brcyan; echo -n ": "; set_color white; echo "Путь до родительского каталога репозитория"
set_color green; echo -n " -i --import "; set_color brmagenta; echo -n "[путь] "; set_color brcyan; echo -n ": "; set_color white; echo "Путь до каталога для импорта"
echo
set_color green; echo -n " -h --help "; set_color brcyan; echo -n ": "; set_color white; echo "Общая информация (этот текст)"
set_color green; echo -n " -r --rules "; set_color brcyan; echo -n ": "; set_color white; echo "Правила обработки параметров"
echo
exit 1
end
function rules -d "Вывод правил обработки параметров"
echo
set_color brmagenta; echo -n " [репозиторий] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^[A-z_1-9]+\$/"
set_color brmagenta; echo -n " [флаги] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^-[a-z1-9]?\s*[A-z_1-9]*\$/"
set_color brmagenta; echo -n " [путь] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^[\/?[A-z_1-9]+]*\$/"
echo
exit 1
end
function print -a CATEGORY TYPE PARAM1 PARAM2 -d "Вывод сообщений по категориям"
switch $CATEGORY
case REQUEST
switch $TYPE
case IMPORT_REQUEST_INFO
set_color yellow; echo -n "[GITLER] "; set_color blue; echo -n "[ЗАДАЧА] "; set_color white; echo -n "Импортировать файл: "; set_color cyan; echo -n "$PARAM1 "; set_color white; echo "?"
case IMPORT_REQUEST
set_color yellow; echo -n "[GITLER] "; set_color brcyan; echo -n "[РЕШИТЬ] "; set_color white; echo -n "YES (!y) : NO (n) : SKIP (s) : ALL (a) "; set_color white; echo "> "
case DELETE_REQUEST_INFO
set_color yellow; echo -n "[GITLER] "; set_color blue; echo -n "[ЗАДАЧА] "; set_color white; echo -n "Удалить файл: "; set_color cyan; echo -n "$PARAM1 "; set_color white; echo "?"
case DELETE_REQUEST
set_color yellow; echo -n "[GITLER] "; set_color brcyan; echo -n "[РЕШИТЬ] "; set_color white; echo -n "YES (!y) : NO (n) : SKIP (s) : ALL (a) "; set_color white; echo "> "
end
case INFO
switch $TYPE
case CREATE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Создан репозиторий: "; set_color cyan; echo "$PARAM1"
case DELETE_FILE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Удалён файл: "; set_color cyan; echo "$PARAM1"
case DELETE_CATALOG
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Удалён пустой каталог: "; set_color cyan; echo "$PARAM1"
case DELETE_NOT_EMPTY
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Не удалён каталог содержащий файлы: "; set_color cyan; echo "$PARAM1"
case DELETE_FORCE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Удалён репозиторий: "; set_color cyan; echo "$PARAM1"
case WORKPATH
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Установлен каталог для выполнения: "; set_color cyan; echo "$PARAM1"
case IMPORT
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Файл импортирован: "; set_color cyan; echo "$PARAM1"
case IMPORT_FORCE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Грубо импортирован файл (-f --force): "; set_color cyan; echo "$PARAM1"
case IMPORT_END
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo "Импортирование завершено"
case OPTION_SET
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[РАБОТА] "; set_color white; echo -n "Установлена опция "; set_color cyan; echo -n "$PARAM1 "; echo -n "в репозитории "; set_color cyan; echo "$PARAM2"
end
case ERROR
switch $TYPE
case REPO_EXIST
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ОШИБКА] "; set_color white; echo -n "Репозиторий уже существует: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[ПОМОЩЬ] "; set_color white; echo "Удалите репозиторий (-d --delete) или используйте (-f --force)"
case WRONG_NAME
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ОШИБКА] "; set_color white; echo -n "Неправильное название репозитория: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[ПОМОЩЬ] "; set_color white; echo "Шаблон обработки: /^[A-z_1-9]+\$/"
case REPO_NOT_FOUND
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ОШИБКА] "; set_color white; echo -n "Не найден репозиторий: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[ПОМОЩЬ] "; set_color white; echo "Проверьте существование, права доступа и введённые данные"
case IMPORT_NOT_SET
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ОШИБКА] "; set_color white; echo "Не задан каталог для импорта файлов"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[ПОМОЩЬ] "; set_color white; echo "Пример: gitler my_repo -i ~/examples"
case IMPORT_NOT_FOUND
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ОШИБКА] "; set_color white; echo -n "Не найден каталог для импорта файлов: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[ПОМОЩЬ] "; set_color white; echo "Проверьте существование, права доступа и введённые данные"
end
end
end
else
function help -d "Show the manual for working with the program"
echo
set_color yellow; echo -n " Template: "; set_color white; echo -n " gitler "; set_color brmagenta; echo "[repository] [flags]"
echo
set_color green; echo -n " -c --create "; set_color brcyan; echo -n ": "; set_color white; echo "Create repository"
set_color green; echo -n " -d --delete "; set_color brcyan; echo -n ": "; set_color white; echo "Delete repository"
set_color green; echo -n " -f --force "; set_color brcyan; echo -n ": "; set_color white; echo "Overwrite or ignore as needed"
set_color green; echo -n " -p --path "; set_color brmagenta; echo -n "[path] "; set_color brcyan; echo -n ": "; set_color white; echo "Path to the parent directory of the repository"
set_color green; echo -n " -i --import "; set_color brmagenta; echo -n "[path] "; set_color brcyan; echo -n ": "; set_color white; echo "Directory path for import"
echo
set_color green; echo -n " -h --help "; set_color brcyan; echo -n ": "; set_color white; echo "General information (this text)"
set_color green; echo -n " -r --rules "; set_color brcyan; echo -n ": "; set_color white; echo "Parameter processing rules"
echo
exit 1
end
function rules -d "Displaying rules for processing parameters"
echo
set_color brmagenta; echo -n " [repository] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^[A-z_1-9]+\$/"
set_color brmagenta; echo -n " [flags] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^-[a-z1-9]?\s*[A-z_1-9]*\$/"
set_color brmagenta; echo -n " [path] "; set_color brcyan; echo -n ": "; set_color yellow; echo "/^[\/?[A-z_1-9]+]*\$/"
echo
exit 1
end
function print -a CATEGORY TYPE PARAM1 PARAM2 -d "Display messages by category"
switch $CATEGORY
case REQUEST
switch $TYPE
case IMPORT_REQUEST_INFO
set_color yellow; echo -n "[GITLER] "; set_color blue; echo -n "[TASK] "; set_color white; echo -n "Import file: "; set_color cyan; echo -n "$PARAM1 "; set_color white; echo "?"
case IMPORT_REQUEST
set_color yellow; echo -n "[GITLER] "; set_color brcyan; echo -n "[DECIDE] "; set_color white; echo -n "YES (!y) : NO (n) : SKIP (s) : ALL (a) "; set_color white; echo "> "
case DELETE_REQUEST_INFO
set_color yellow; echo -n "[GITLER] "; set_color blue; echo -n "[TASK] "; set_color white; echo -n "Delete a file: "; set_color cyan; echo -n "$PARAM1 "; set_color white; echo "?"
case DELETE_REQUEST
set_color yellow; echo -n "[GITLER] "; set_color brcyan; echo -n "[DECIDE] "; set_color white; echo -n "YES (!y) : NO (n) : SKIP (s) : ALL (a) "; set_color white; echo "> "
end
case INFO
switch $TYPE
case CREATE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Repository created: "; set_color cyan; echo "$PARAM1"
case DELETE_FILE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "File deleted: "; set_color cyan; echo "$PARAM1"
case DELETE_CATALOG
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Removed empty directory: "; set_color cyan; echo "$PARAM1"
case DELETE_NOT_EMPTY
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "The directory is not deleted because it contains files: "; set_color cyan; echo "$PARAM1"
case DELETE_FORCE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Removed repository: "; set_color cyan; echo "$PARAM1"
case WORKPATH
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Installed execution directory: "; set_color cyan; echo "$PARAM1"
case IMPORT
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "File imported: "; set_color cyan; echo "$PARAM1"
case IMPORT_FORCE
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Hard imported file (-f --force): "; set_color cyan; echo "$PARAM1"
case IMPORT_END
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo "Import completed"
case OPTION_SET
set_color yellow; echo -n "[GITLER] "; set_color green; echo -n "[WORK] "; set_color white; echo -n "Option installed "; set_color cyan; echo -n "$PARAM1 "; echo -n "in repository "; set_color cyan; echo "$PARAM2"
end
case ERROR
switch $TYPE
case REPO_EXIST
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ERROR] "; set_color white; echo -n "Repository already exists: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[HELP] "; set_color white; echo "Delete the repository (-d --delete) or use (-f --force)"
case WRONG_NAME
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ERROR] "; set_color white; echo -n "Incorrect repository name: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[HELP] "; set_color white; echo "Processing template: /^[A-z_1-9]+\$/"
case REPO_NOT_FOUND
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ERROR] "; set_color white; echo -n "Repository not found: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[HELP] "; set_color white; echo "Check existence, access rights and entered data"
case IMPORT_NOT_SET
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ERROR] "; set_color white; echo "Import directory not specified"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[HELP] "; set_color white; echo "Sample: gitler my_repo -i ~/examples"
case IMPORT_NOT_FOUND
set_color yellow; echo -n "[GITLER] "; set_color red; echo -n "[ERROR] "; set_color white; echo -n "Directory to import files not found: "; set_color cyan; echo "$PARAM1"
set_color yellow; echo -n "[GITLER] "; set_color brmagenta; echo -n "[HELP] "; set_color white; echo "Check existence, access rights and entered data"
end
end
end
end
if test (count $argv) = 0
help
end
# Сохраняю изначальное количество аргументов
# При обработке аргумента вычитается единица
# Таким образом я определяю порядок аргументов
set ARGV_AMOUNT_ORIGINAL (count $argv)
set ARGV_AMOUNT $ARGV_AMOUNT_ORIGINAL
# Обработка параметров запуска
getopts $argv | \
while read -l key value
# Первый параметр
if test "$ARGV_AMOUNT" = "$ARGV_AMOUNT_ORIGINAL"
if test "$key" = _
if test (string match -r '^[A-z_1-9]+$' $value)
set NAME $value
else
print ERROR WRONG_NAME $value
exit 1
end
else
help
end
# Флаги
else
switch $key
case _
set -a OPTIONS $value
case h help
help
case r rules
rules
case f force
set FLAG_FORCE 1
case c create
set FLAG_CREATE 1
case d delete
set FLAG_DELETE 1
case p path
set WORKPATH $value
case i import
if test -n $value -a true != $value
set IMPORT $value
else
print ERROR IMPORT_NOT_SET $value
exit 1
end
end
end
set ARGV_AMOUNT (math $ARGV_AMOUNT - 1)
end
# Инициализация рабочей директории, если не был передан параметр
if test -z "$WORKPATH"
set fish_prompt_pwd_dir_length 0
set WORKPATH (prompt_pwd)
print INFO WORKPATH $WORKPATH
end
# [ФУНКЦИЯ] Создание репозитория (-c --create)
if test "$FLAG_CREATE" = "1"
if test -d "$WORKPATH/$NAME" -a ! "$FLAG_FORCE" = "1"
print ERROR REPO_EXIST "$WORKPATH/$NAME"
exit 1
else
# Создание директории репозитория
mkdir -p "$WORKPATH/$NAME"
# Сохранение текущей рабочей директории
set fish_prompt_pwd_dir_length 0
set OLD_WORKPATH (prompt_pwd)
# Переход в директорию репозитория
cd "$WORKPATH/$NAME"
# Создание репозитория
git --bare init > /dev/null
# Возврат в стартовую рабочую директорию
cd $OLD_WORKPATH
print INFO CREATE $NAME
end
end
# [ФУНКЦИЯ] Установка опций
if test -n "$OPTIONS"
# Проверяет существование репозитория
if test ! -d "$WORKPATH/$NAME"
print ERROR REPO_NOT_FOUND "$WORKPATH/$NAME"
exit 1
end
# Перебор всех полученных опций
for OPTION in $OPTIONS
# Разделение строки на опции
echo $OPTION | read OPTION_KEY OPTION_VALUE
# Добавление опции
sudo git -C "$WORKPATH/$NAME" config --local $OPTION_KEY $OPTION_VALUE
sudo git update-server-info
print INFO OPTION_SET $OPTION "$WORKPATH/$NAME"
end
end
# [ФУНКЦИЯ] Импортирование (-i --import [path])
if test -n "$IMPORT"
# Проверяет существование репозитория
if test ! -d "$WORKPATH/$NAME"
print ERROR REPO_NOT_FOUND "$WORKPATH/$NAME"
exit 1
end
# Проверяет существование каталога для импорта
if test ! -d $IMPORT
print ERROR IMPORT_NOT_FOUND $IMPORT
exit 1
end
# Активация грубого импортирования
if test "$FLAG_FORCE" = "1"
set IMPORT_ALL 1
end
# Сохранение текущей рабочей директории
set fish_prompt_pwd_dir_length 0
set OLD_WORKPATH (prompt_pwd)
# Переход в импортируемую директорию
cd "$IMPORT"
# Поиск всех файлов для импортирования и обработка каждого в цикле
find ./* |
while read -al FILE
# Проверка активации "импортировать всё"
if test "$IMPORT_ALL" != "1"
# Запрос на подтверждение импортирования
print REQUEST IMPORT_REQUEST_INFO $FILE
set RESPONSE (read -n 1 -p "print REQUEST IMPORT_REQUEST $FILE")
bind -e y
bind -e n
bind -e s
bind -e a
end
# Обработка ответа: "пропустить"
if test (string match -ri 'n' "$RESPONSE")
continue
# Обработка ответа: "импортировать всё"
else if test (string match -ari '^all$|^a$' "$RESPONSE")
set IMPORT_ALL 1
# Обработка ответа: "пропустить всё"
else if test (string match -ari '^skip$|^s$' "$RESPONSE")
break
end
# Импортирование
cp -a "$FILE" "$WORKPATH/$NAME/$FILE"
print INFO IMPORT $FILE
end
# Возврат в стартовую рабочую директорию
cd $OLD_WORKPATH
# Уведомление об окончании импортирования
print INFO IMPORT_END $FILE
end
# [ФУНКЦИЯ] Удаление репозитория (-d --delete)
if test "$FLAG_DELETE" = "1"
# Проверяет существование репозитория
if test ! -d "$WORKPATH/$NAME"
print ERROR REPO_NOT_FOUND "$WORKPATH/$NAME"
exit 1
end
# Сценарий грубого удаления
if test "$FLAG_FORCE" = "1"
rm -rf "$WORKPATH/$NAME"
print INFO DELETE_FORCE $NAME
# Сценарий обычного удаления
else
# Поиск всех файлов для удаления и обработка каждого в цикле
find $WORKPATH/$NAME -type f |
while read -al FILE
# Проверка активации "удалить всё"
if test "$DELETE_ALL" != "1"
# Запрос на подтверждение удаления
print REQUEST DELETE_REQUEST_INFO $FILE
set RESPONSE (read -n 1 -p "print REQUEST DELETE_REQUEST $FILE")
end
# Обработка ответа: "пропустить"
if test (string match -ri 'n' "$RESPONSE")
continue
# Обработка ответа: "удалить всё"
else if test (string match -ari '^all$|^a$' "$RESPONSE")
set DELETE_ALL 1
# Обработка ответа: "пропустить всё"
else if test (string match -ari '^skip$|^s$' "$RESPONSE")
break
end
# Удаление
rm -f "$FILE"
print INFO DELETE_FILE $FILE
end
# Удаление оставшихся пустых каталогов
find $WORKPATH/$NAME -type d | sort -r |
while read -al FILE
# Проверка на то, что не активирован пропуск удаления всего
if test ! (string match -ari '^skip$|^s$' "$RESPONSE")
# Если получена ошибка (каталог не пустой)
if test (cat (rm -d "$FILE" 2>| psub))
print INFO DELETE_NOT_EMPTY $FILE
# Если ошибки нет и удаление прошло успешно
else
print INFO DELETE_CATALOG $FILE
end
end
end
end
end
# sudo useradd $OWNER
# sudo chown -R www-data:www-data /var/www/git/projects/$REPOSITORY
# sudo chmod -R 755 /var/www/git/projects/$REPOSITORY
exit 0