2009-02-19 170 views
3

我目前正试图扩展我们已经存在的(和工作)预提交批处理文件,以提交给SVN。第一部分阻止任何没有评论并按预期工作的提交。第二部分是阻止用户提交SUO文件,但是这当前阻止了所有提交。SVN预提交挂钩

我对DOs脚本的理解并不好,所以我怀疑它可能是我对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 

回答

5

如果发现了什么,findstr返回0,如果没有找到,则返回1。你只是倒了支票。

无需批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 

然后它会破坏任何未来的打印ou以正确的方式错误级别为%errorlevel%。

编辑)重要提示:我忘了说,错误级别的if errorlevel语法检查是否为大于或等于到被测试的值了。因此,要正确使用它,你必须首先检查最高的错误,如:

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

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

+0

投了,绝对不值得-1。 – 2009-02-19 11:18:49