2009-02-19 145 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