Поскольку 1-й ответ не препятствовал добавлению / поддержке файлов и предотвращал создание новых тегов, а также многих других, неполных или ошибочных, я переработал его.
Вот мой прием перед фиксацией: Цели:
- Запретить коммиты по тегам (добавление / подавление / обновление файлов)
- Не препятствовать созданию тегов
--------- файл "pre-commit" (поместить в папку хуков репозиториев) ---------
#!/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;
--------- конец файла «предварительная фиксация» ---------
Кроме того, я сделал 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 (в моем случае / var / svn / repos / svn). Кстати, задача cron может быть настроена для автоматического изменения новых репозиториев, ежедневно выполняя сценарии thoses.
Надеюсь, поможет.
person
Balmipour
schedule
11.07.2014