2012-04-27 74 views
1

我想阻止我的SVN存儲庫的用戶檢查某些文件的更改。我通過使用下面的預先提交的鉤子腳本完成了這一點。然而,受限制文件的數量正在增加,並且變得非常緩慢。我想知道是否有更有效的編碼方式,我玩過更改列表,但我無法完成這項工作。SVN預先提交掛鉤腳本來阻止用戶更改某些存儲庫文件

預先感謝

pre-commit鉤子腳本(基於窗口的SVN庫):

setlocal 
:: Inputs from Subversion 
set REPOS=%1% 
set TXN=%2% 

:: Checks if one of the reference files 
Rem Check if the commit contains reference files 
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part1.txt" > nul 
if %errorlevel%==0 (goto RefPart) 
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part2.txt" > nul 
if %errorlevel%==0 (goto RefPart) 
...... 
..... 
etc etc 

exit 0 

:: Blocks the commit if part are reference 
: RefPart 
echo. 1>&2 
echo ---------------------------------------------------------------------- 1>&2 
echo Your commit has been cancelled because you are trying to change a  1>&2 
echo part for a reference turbine! Please make a copy of this part and  1>&2 
echo save it under a different name.          1>&2 
echo ---------------------------------------------------------------------- 1>&2 
echo. 1>&2 
exit 1 
+0

你可能應該找到一種不同的方式來鎖定文件,但也許只有一個'svnlook改變%REPOS%-t%TXN%'可能會有所幫助(我不知道這個或findstr是瓶頸)。 – crashmstr 2012-04-27 15:56:17

回答

0

我會重寫這個使用Perl而不是Windows cmd腳本。 Perl有更好的正則表達式支持,所以你可以使它快一點,而不是使用腳本查看所有的參考文件 - 你可以過濾目錄和模式。

草莓perl很容易得到運行 - 下載它,把exe和perl dll放在你的路徑上的一個目錄中,完成任務。

請注意,我也曾經用windows腳本使用findstr來過濾很快的文件擴展名列表。我將svnlook的結果寫入文件(不要忘記將revnum追加到文件名中,然後將其刪除),並將其作爲findtr命令的輸入,並使用/ G選項。先嚐試一下。

3

打出來的 「參照渦輪機」 到一個不同的svn庫,構建它作爲一個庫,和將其作爲圖書館分發。然後只給需要它的人提供「參考渦輪」庫。

檢查出不可修改的源代碼被無權更改的人建造數百次只是浪費電力和時間。

如果您擔心他們需要在調試會話期間逐步通過參考渦輪機源,請提供兩種版本的庫,一種帶有調試符號和相應的源代碼,另一種不帶調試符號。大多數IDE都具有加載「源代碼」包的概念,以提供可讀的文本以伴隨調試會話。