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  
Другие вопросы по тегам