Скрипт SVN pre-commit hook для блокировки пользователей, изменяющих определенные файлы репозитория

Я хочу запретить пользователям моего SVN-репозитория проверять изменения определенных файлов. Я сделал это с помощью следующего скрипта pre-commit hook. Тем не менее, количество запрещенных файлов растет, и становится очень медленно совершать изменения. Мне было интересно, есть ли более эффективный способ его кодирования, я играл со списками изменений, но я не могу заставить это работать.

заранее спасибо

Скрипт предварительной фиксации (Windows-репозиторий SVN):

setlocal
:: Inputs from Subversion
set REPOS=%1%
set TXN=%2%

:: Checks if one of the reference files
Rem Check if the commit contains reference files
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part1.txt" > nul
if %errorlevel%==0 (goto RefPart)
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part2.txt" > nul
if %errorlevel%==0 (goto RefPart)
......
.....
etc etc

exit 0

:: Blocks the commit if part are reference
: RefPart
echo. 1>&2
echo ---------------------------------------------------------------------- 1>&2
echo Your commit has been cancelled because you are trying to change a      1>&2
echo part for a reference turbine! Please make a copy of this part and      1>&2
echo save it under a different name.                                        1>&2
echo ---------------------------------------------------------------------- 1>&2
echo. 1>&2
exit 1

2 ответа

Решение

Я бы переписал это, чтобы использовать Perl, а не сценарий Windows CMD. Perl имеет гораздо лучшую поддержку регулярных выражений, поэтому вы можете сделать это немного быстрее, чем использовать скрипт для просмотра всех справочных файлов - вместо этого вы можете фильтровать по каталогам и шаблонам.

Strawberry Perl легко запустить - скачайте его, поместите exe и perl dll в каталог по вашему пути, работа выполнена.

Имейте в виду, я также использовал findstr со сценарием Windows для фильтрации списка расширений файлов, который был быстрым. Я написал результаты svnlook, измененные в файл (не забудьте добавить revnum к имени файла и впоследствии удалить его) и использовал его в качестве входных данных для команды findstr с параметром /G. Попробуйте сначала.

Разбейте "эталонную турбину" на другой репозиторий svn, соберите ее как библиотеку и распространите как библиотеку. Только тогда предоставьте доступ к библиотеке "Эталонная турбина" тем, кто в ней нуждается.

Проверка неизменяемого исходного кода, который сотни раз создавали люди, не имеющие прав на его изменение, - это просто трата электричества и времени.

Если вы обеспокоены тем, что им нужно пройти через источник эталонной турбины во время сеансов отладки, предложите для распространения две версии библиотеки, одну с символами отладки и соответствующим исходным кодом и одну без символов отладки. Большинство IDE имеют концепцию загрузки пакета "исходного кода", чтобы обеспечить читабельный текст для сопровождения сеанса отладки.

Другие вопросы по тегам