用于评论长度的 Windows 预提交挂钩 Subversion
-
22-08-2019 - |
题
我似乎对此毫无进展。在网络上搜索脚本等。任何人都可以获得一个脚本,您可以在 Windows 环境中编辑开箱即用的 pre-commit.tmpl,该脚本需要输入 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
这个文件坐落在库中,命名为预commit.bat的/钩文件夹。如果需要的字符的最小量,以修改线是
svnlook log %REPOS% -t %TXN% | findstr . > nul
所以,如果你想要一个最低的10个字符,你需要有10的,而不仅仅是一个
svnlook log %REPOS% -t %TXN% | findstr .......... > nul
对于FINDSTR 命令的更多高级选项会让你做票友检查(某些字符集,ECT)
其他提示
我使用 SubversionNotify ,它可能确实比你所需要的更多,但是是非常简单的设置
尝试这种情况:
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 shell 脚本、Unix Makefile 和 Windows Batch 文件具有正确的行结尾等事情非常有用,或者
svn:ignore
设置后,用户就不会意外提交不应该提交的文件。 - 要求将某些修订属性设置为某些值。这就是你检查提交消息的方式,但是说
svn:log
必须匹配某些正则表达式。
该预提交脚本是用 Perl 编写的。默认情况下,Perl 附带 Unix、Mac 和 Linux 服务器。不幸的是,它不包含在 Windows 计算机上。幸运的是,有几个开源、免费且易于安装的 PC Perl 软件包,例如 活动Perl 和 草莓 Perl
在Windows中,您可以使用VisualSVNServerHooks.exe check-logmessage
预先承诺附带VisualSVN服务器和位于%VISUALSVN_SERVER%bin
目录挂钩。这个简单的工具将帮助您定义日志消息字符的最小允许数量。
请参阅文章 KB140:验证提交日志信息在VisualSVN服务器获取指令