Поскольку 1-й ответ не препятствовал добавлению / поддержанию файлов, а также предотвращал создание новых тегов и многие другие, если они были неполными или содержали ошибки, я переработал его
Вот мой хук предварительной фиксации:
Цели:
- Запретить фиксацию тегов (добавление / подавление / обновление файлов)
- Не запрещать создание тегов
--------- файл "pre-commit" (положить в репозитории hooks folder) ---------
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
#Logs
#$SVNLOOK changed -t "$TXN" "$REPOS" > /tmp/changes
#echo "$TXN" > /tmp/txn
#echo "$REPOS" > /tmp/repos
# Committing to tags is not allowed
# Forbidden changes are Update/Add/Delete. /W = non alphanum char Redirect is necessary to get the error message, since regular output is lost.
# BUT, we must allow tag creation / suppression
$SVNLOOK changed -t "$TXN" "$REPOS" | /bin/grep "^A\W.*tags\/[0-9._-]*\/." && /bin/echo "Commit to tags are NOT allowed ! (Admin custom rule)" 1>&2 && exit 101
$SVNLOOK changed -t "$TXN" "$REPOS" | /bin/grep "^U\W.*tags\/[0-9._-]*\/." && /bin/echo "Commit to tags are NOT allowed ! (Admin custom rule)" 1>&2 && exit 102
$SVNLOOK changed -t "$TXN" "$REPOS" | /bin/grep "^D\W.*tags\/[0-9._-]*\/." && /bin/echo "Commit to tags are NOT allowed ! (Admin custom rule)" 1>&2 && exit 104
# All checks passed, so allow the commit.
exit 0;
--------- конец файла "pre-commit" ---------
Кроме того, я сделал 2 сценария оболочки, чтобы скопировать мой хук в каждом проекте моего SVN:
Один для установки репо только для чтения:
--------- скрипт "setOneRepoTagsReadOnly.sh" ---------
#!/bin/sh
cd /var/svn/repos/svn
zeFileName=$1/hooks/pre-commit
/bin/cp ./CUSTOM_HOOKS/pre-commit $zeFileName
chown www-data:www-data $zeFileName
chmod +x $zeFileName
--------- конец файла "setOneRepoTagsReadOnly.sh" ---------
И кто-то звонит для каждого репо, чтобы все мои репозитории были доступны только для чтения:
--------- файл "makeTagsReadOnly.sh" ---------
#!/bin/shs/svn
#Lists all repos, and adds the pre-commit hook to protect tags on each of them
find /var/svn/repos/svn/ -maxdepth 1 -mindepth 1 -type d -execdir '/var/svn/repos/svn/setOneRepoTagsReadOnly.sh' \{\} \;
--------- конец файла "makeTagsReadOnly.sh" ---------
Я выполняю эти сценарии непосредственно из svn "root" (в моем случае / var / svn / repos / svn).
Кстати, можно установить задачу cron для автоматического изменения новых репозиториев, ежедневно выполняя эти скрипты
Надеюсь, это поможет.