398 lines
24 KiB
Fish
398 lines
24 KiB
Fish
#!/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
|