Windows Pre-commit хук для длины комментария Subversion - PullRequest
33 голосов
/ 15 мая 2009

Я, кажется, ничего не получаю с этим. Либо поискать в Интернете сценарий и т. Д. У каждого есть сценарий, в котором вы можете просто отредактировать готовый файл pre-commit.tmpl в среде Windows, для которого требуется ввести x символов для комментария к фиксации в Tortoise Subversion глобально, чтобы все члены команды были необходимы, тогда как это требование передается клиентам с сервера SVN?

Я не знаю языка сценариев, и это должно быть что-то чертовски простое, без того, чтобы я потратил время на изучение сценариев в течение следующих 3 часов.

Ответы [ 5 ]

55 голосов
/ 15 мая 2009

Это файл .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. Вместо одного

svnlook log %REPOS% -t %TXN% | findstr .......... > nul

Дополнительные дополнительные параметры для команды findstr позволят вам выполнять более сложные проверки (определенные наборы символов и т. Д.)

2 голосов
/ 15 мая 2009

Я использую SubversionNotify , он, вероятно, делает больше, чем вам нужно, но довольно прост в настройке.

1 голос
/ 13 сентября 2018

В Windows вы можете использовать ловушку предварительной фиксации VisualSVNServerHooks.exe check-logmessage, которая поставляется с сервером VisualSVN и находится в каталоге %VISUALSVN_SERVER%bin. Этот простой инструмент поможет вам определить минимально допустимое количество символов в сообщении журнала.

См. Статью KB140: Проверка сообщений журнала фиксации на сервере VisualSVN для получения инструкций.

1 голос
/ 11 декабря 2012

У меня есть ловушка для предварительной фиксации , которая может делать именно то, что вы хотите. Плюс намного больше.

  • Вы можете указать минимальную длину комментария.
  • Вы можете сопоставить комментарий фиксации с регулярным выражением . Вы можете не только указать длину, но и некоторые параметры. Например, содержит ли комментарий фиксации номер ошибки, используемый вашей системой отслеживания дефектов, чтобы вы могли отследить изменение определенного дефекта?

Это также позволяет вам делать следующее:

  • Установка различных разрешений на фиксацию для определенных файлов или каталогов:
    • чтение-запись : пользователь может оформить заказ и зафиксировать эти элементы.
    • только для чтения : пользователь может оформить заказ, но не может зафиксировать изменения.
    • только для добавления : пользователь может добавить каталог через svn cp, но не вносить никаких изменений. Это идеально подходит для каталога /tags, где вам разрешено создавать тег, но не изменять тег.
    • no-delete : пользователи могут фиксировать изменения и добавлять новые файлы, но не удалять эти файлы.
    • без добавления : пользователи могут только фиксировать изменения, но не добавлять и не удалять файлы в коммите.

И это также позволяет вам сделать это:

  • Запретить определенные имена файлов с помощью регулярных выражений globbing ,
  • Требуется, чтобы определенные файлы или каталоги имели определенное свойство, установленное на определенное значение. Очень полезно, например, чтобы убедиться, что сценарии оболочки Unix, файлы сборки Unix и пакетные файлы Windows имеют правильное окончание строки или установлен svn:ignore, чтобы пользователи не могли случайно зафиксировать файлы, которые они не должны фиксировать.
  • Требовать, чтобы определенные свойства ревизий были установлены с определенными значениями. Вот как вы проверяете сообщения коммита, но говорите, что svn:log должен соответствовать определенным регулярным выражениям.

Этот сценарий предварительной фиксации написан на Perl. По умолчанию Perl поставляется с серверами Unix, Mac и Linux. К сожалению, он не включен на компьютерах с Windows. К счастью, существует несколько бесплатных и простых в установке пакетов Perl для ПК, таких как ActivePerl и Strawberry Perl

1 голос
/ 04 декабря 2009

Попробуйте это:

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  
...