Перехватчик предварительной фиксации Windows для длины комментария Subversion
-
22-08-2019 - |
Вопрос
Кажется, я никуда от этого не денусь.Либо поиск в сети скрипта и т.д.У кого-нибудь есть сценарий, который вы можете просто отредактировать готовый файл pre-commit.tmpl в среде Windows, который требует ввода символов x для комментария к фиксации в Tortoise Subversion глобально, чтобы это было необходимо всем членам команды. тогда как это требование переносится на клиентов с сервера SVN?
Я не знаю языка сценариев, и это должно быть что-то чертовски простое, и мне не придется тратить время на то, чтобы разобраться в сценариях в течение следующих 3 часов.
Решение
Это файл .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 команда позволит вам выполнять более сложные проверки (определенные наборы символов и т. д.)
Другие советы
я использую Уведомление о Subversion, возможно, он делает больше, чем вам нужно, но его довольно просто настроить.
Попробуй это :
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
у меня есть перехватчик предварительной фиксации который может делать именно то, что вы хотите.Плюс многое другое.
- Вы можете указать минимальную длину комментария фиксации.
- Вы можете сопоставить комментарий фиксации с регулярное выражение.Вы можете указать не только длину, но и определенные параметры.Например, содержит ли комментарий к фиксации номер ошибки, который использует ваша система отслеживания дефектов, чтобы вы могли отследить изменение до конкретного дефекта?
Это также позволяет вам делать следующее:
- Установите различные разрешения на фиксацию для определенных файлов или каталогов:
- читай пиши:Пользователь может оформить заказ и зафиксировать эти элементы.
- только для чтения:Пользователь может оформить заказ на этот элемент, но не может зафиксировать изменения.
- только для добавления:Пользователь может добавить каталог через
svn cp
, но не вносить никаких изменений.Это идеально подходит для/tags
каталог, в котором вам разрешено создавать тег, но не изменять его. - не удалять:Пользователи могут фиксировать изменения и добавлять новые файлы, но не удалять эти файлы.
- не добавлять:Пользователи могут только фиксировать изменения, но не добавлять или удалять файлы в фиксации.
И это также позволяет вам сделать это:
- Запретить определенные имена файлов с помощью регулярных выражений шарик,
- Требовать, чтобы определенные файлы или каталоги имели определенное свойство, которому присвоено определенное значение.Очень полезно, например, для проверки правильности окончания строки в сценариях оболочки Unix, файлах Makefile Unix и пакетных файлах Windows.
svn:ignore
установлен, чтобы пользователи случайно не фиксировали файлы, которые им не следует фиксировать. - Требовать, чтобы для определенных свойств ревизий были установлены определенные значения.Вот как вы проверяете сообщения о фиксации, но говорите, что
svn:log
должно соответствовать определенным регулярным выражениям.
Этот сценарий предварительной фиксации написан на Perl.По умолчанию Perl поставляется с серверами Unix, Mac и Linux.К сожалению, он не включен в компьютеры с Windows.К счастью, существует несколько бесплатных и простых в установке пакетов Perl с открытым исходным кодом для ПК, таких как АктивПерл и Клубничный Перл
В Windows вы можете использовать VisualSVNServerHooks.exe check-logmessage
перехватчик предварительной фиксации, который поставляется с сервером VisualSVN и находится в папке %VISUALSVN_SERVER%bin
каталог.Этот простой инструмент поможет вам определить минимально допустимое количество символов в сообщении журнала.
Посмотреть статью КБ140:Проверка сообщений журнала фиксации на сервере VisualSVN для инструкций.