Windows Pre-commit хук для длины комментария Subversion
Кажется, с этим ничего не получается. Либо поискать в Интернете сценарий и т. Д. У каждого есть сценарий, в котором вы можете просто отредактировать готовый файл pre-commit.tmpl в среде Windows, для которого требуется ввести x символов для комментария к коммиту в Tortoise Subversion. глобально, чтобы все члены команды были необходимы, тогда как это требование передается клиентам с сервера SVN?
Я не знаю язык сценариев, и это должно быть что-то чертовски простое, без того, чтобы я потратил время на изучение сценариев в течение следующих 3 часов.
5 ответов
Это файл.bat, для которого требуется комментарий. Он проверяет наличие хотя бы одного символа в комментарии.
@echo off
:: Stops commits that have empty log messages.
@echo off
setlocal
rem Subversion sends through the path to the repository and transaction id
set REPOS=%1
set TXN=%2
svnlook log %REPOS% -t %TXN% | findstr . > nul
if %errorlevel% gtr 0 (goto err) else exit 0
:err
echo. 1>&2
echo Your commit has been blocked because you didn't enter a comment. 1>&2
echo Write a log message describing the changes made and try again. 1>&2
echo Thanks 1>&2
exit 1
Этот файл находится в папке / hooks хранилища с именем pre-commit.bat. Если вам нужно минимальное количество символов, строка для изменения
svnlook log %REPOS% -t %TXN% | findstr . > nul
Так что, если вы хотите минимум 10 символов, вам нужно иметь не 10, а 10 символов.
svnlook log %REPOS% -t %TXN% | findstr .......... > nul
Более продвинутые опции для команды findstr позволят вам выполнять более сложные проверки (определенные наборы символов и т. Д.)
Я использую SubversionNotify, он, вероятно, делает больше, чем вам нужно, но довольно прост в настройке.
У меня есть хук предварительной фиксации, который может делать именно то, что вы хотите. Плюс намного больше.
- Вы можете указать минимальную длину комментария.
- Вы можете сопоставить комментарий фиксации с регулярным выражением. Вы можете не только указать длину, но вы также можете указать определенные параметры. Например, содержит ли комментарий фиксации номер ошибки, который использует ваша система отслеживания дефектов, чтобы вы могли отследить изменение определенного дефекта?
Это также позволяет вам делать следующее:
- Установите различные разрешения на фиксацию для определенных файлов или каталогов:
- чтение-запись: пользователь может оформить заказ и зафиксировать эти элементы.
- только для чтения: пользователь может оформить заказ, но не может вносить изменения.
- только для добавления: пользователь может добавить каталог через
svn cp
, но не совершайте никаких изменений. Это идеально подходит для/tags
каталог, в котором вам разрешено делать тег, но не изменять тег. - no-delete: пользователи могут фиксировать изменения и добавлять новые файлы, но не удалять эти файлы.
- no-add: пользователи могут только фиксировать изменения, но не добавлять и не удалять файлы при фиксации.
И это также позволяет вам сделать это:
- Запретить определенные имена файлов с помощью регулярных выражений globbing,
- Требовать, чтобы определенные файлы или каталоги имели определенное свойство, установленное на определенное значение. Очень полезно для таких вещей, как проверка правильности окончания строки в скриптах оболочки Unix, сборочных файлах Unix и пакетных файлах Windows, или
svn:ignore
установлен, поэтому пользователи не могут случайно зафиксировать файлы, которые они не должны фиксировать. - Требовать, чтобы определенные свойства ревизий были установлены с определенными значениями. Вот как вы проверяете коммит сообщения, но говорите, что
svn:log
должен соответствовать определенным регулярным выражениям.
Этот сценарий предварительной фиксации написан на Perl. По умолчанию Perl поставляется с серверами Unix, Mac и Linux. К сожалению, он не включен на компьютерах с Windows. К счастью, существует несколько бесплатных и простых в установке пакетов Perl для ПК, таких как ActivePerl и http://strawberryperl.com/.
В Windows вы можете использовать VisualSVNServerHooks.exe check-logmessage
ловушка предварительной фиксации, которая поставляется с сервером VisualSVN и находится в %VISUALSVN_SERVER%bin
каталог. Этот простой инструмент поможет вам определить минимально допустимое количество символов в сообщении журнала.
Инструкции см. В статье KB140: проверка сообщений журнала фиксации на сервере VisualSVN.
Попробуй это:
rem Make sure that the log message contains some text.
set REPOS=%1
set TXN=%2
"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo Your commit has been blocked because you didn't provide a log message 1>&2
echo Please write a log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
:OK
rem -------------------------------------------------------------
rem Check if comment is in list of reserved words to not be used..
rem -------------------------------------------------------------
"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment
setlocal enabledelayedexpansion
Set SEPARATOR=
set COMMENT=
for /f "delims=" %%a in (comment) do (
set currentline=%%a
set COMMENT=!COMMENT!%SEPARATOR%!currentline!
)
FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null
If %ERRORLEVEL% EQU 1 goto OK2
:Fail
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2
echo Line is -%COMMENT%- 1>&2
echo Please write a proper log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
:OK2
rem -------------------------------------------------------------
rem Check number of words on the line if = 2 then reject comment
rem -------------------------------------------------------------
Set VAR1=%COMMENT%
Set count=0
For %%j in (%VAR1%) Do Set /A count+=1
IF %count% EQU 2 goto Fail2
goto OK3
:Fail2
echo Your commit has been blocked because not enough detail supplied 1>&2
echo Please write a longer log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1
:OK3
rem -------------------------------------------------------------
rem Check that the author of this commit has the rights to perform
rem -------------------------------------------------------------
rem the commit on the files and directories being modified.
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
rem All checks passed, so allow the commit.
exit 0