SVN Pre Commit Hooks

时间:2009-02-19 10:12:43

标签: svn batch-file svn-hooks findstr pre-commit

我目前正在尝试扩展我们已经存在的(并且正在工作的)预提交批处理文件,以便提交到SVN。第一部分阻止任何没有注释并按预期工作的提交。第二部分是阻止用户提交SUO文件的attmept,但是这当前阻止了所有提交。

我对DO脚本的理解不是很好,所以我怀疑它可能是我对FindStr的使用?

有人可以帮忙吗?

"C:\Program Files\VisualSVN Server\bin\svnlook.exe" log -t %2 %1 | FindStr [a-zA-Z0-9]
IF %ERRORLEVEL% EQU 0 GOTO OK
echo "Commit Comments are Required" >&2
exit 1
:OK
"C:\Program Files\VisualSVN Server\bin\svnlook.exe" diff -t %2 %1 | FindStr /R "[a-zA-Z]\.suo"
IF %ERRORLEVEL% EQU 0 exit 0
echo "SUO files cannot be committed" >&2
exit 1

2 个答案:

答案 0 :(得分:5)

如果找到了某些东西,findstr返回0,如果找不到,则返回1。你把你的支票倒了。

不需要batch-foo,即使在Windows上,shell也是交互式的,所以你可以试一试:

>dir | findstr ".sln"
15.01.2009  16:37            33.844 Project.sln

>echo %ERRORLEVEL%
0

>dir | findstr ".slngimpf"

>echo %ERRORLEVEL%
1

顺便说一句,写起来更容易

if errorlevel 0 andthencontinuewithwhatever

这样你的脚本对于不祥之物也是稳定的:

set errorlevel=0

然后将以正确的方式销毁任何以%errorlevel%打印出错误级别的尝试。

修改)重要说明:我忘了说 if errorlevel 语法检查错误级别是更大还是相等到正在测试的价值。因此,要正确使用它,您必须始终首先检查最高错误,例如:

someCommand
if errorlevel 10 ...
if errorlevel 9 ...
if errorlevel 0 ...

答案 1 :(得分:3)

不完全是您正在寻找的答案,但您可以使用global-ignores选项阻止所有* .suo文件。