接下來就是如何自動化的問題了。我那些版本庫不都是在同一巢狀層上的,有的深有的淺。例如說這樣:
repository
+ ironruby
* trunk
* nemerle
+ ruby
* ruby_1_8
* trunk
星號標註的是要更新的目標。怎麼辦呢?只好遞迴搜尋了。反正能找到帶有".svn"目錄的最上層目錄就被認為是版本庫目錄,以它為標準來判斷是不是要更新的目標;如果是目錄但不是目標則遍歷子目錄來尋找目標。
於是簡單的寫了這樣的ruby指令碼:
#!/usr/bin/ruby
def update_repo( path )
puts path
system "svn up \"#\""
enddef locate_and_update( dir = "." )
entries = dir.entries( dir ).reject do |item|
item =~ /^\.(?:\.|git|hg)?$/ # remove ".", "..", ".git", ".hg"
endif entries.include? ".svn" # if this is a repo
update_repo dir # perform update
else # if this isn't a repo
entries.each do |e| # recursively search for repos
path = "#/#"
locate_and_update path if file.directory? path
endend
endputs time.now # show the time of update
locate_and_update # start from the working directory
把這個指令碼放在我的repository目錄裡,它就能幫我更新整個目錄裡所有的svn版本庫。當然,遞迴搜尋的效率不是太好——如果有任何乙個目錄裡沒有任何子目錄是svn版本庫,這指令碼恐怕要花上好長時間才能「知道」這點。要想快點的話可以改進上面的**,讓locate_and_update搜尋乙個內容是目錄索引的配置檔案,如果不存在的話就以深度優先搜尋建立乙個索引。那樣就不用每次都對整個repository目錄做全面搜尋了。如果版本庫的數量或者位置發生了改變,只要把那個索引檔案刪除它就應該重新生成索引,也不費事。
要完善的話還可以加點引數什麼的,也可以做非互動式處理(傳--non-interactive引數給svn)。不過上面的**已經足夠滿足我自己的需求了,我的repository目錄裡全是svn版本庫,暫時沒把git和mercurial相關的東西放進來……所以懶得多寫指令碼了 ^ ^
分享到:
2008-06-11 07:56
瀏覽 3994
1 樓lwwin
2008-06-11
哦,原來你是這個意思啊……
偶都忘了可以這麼玩=v=+++
svn版本庫瀏覽器 SVN 建立版本庫
svn 建立版本庫 使用svn命令建立資源庫 runoob centos6 svnadmin create opt svn runoob01 runoob centos6 ll opt svn runoob01 total 24 drwxr xr x 2 root root 4096 2016 08...
判斷瀏覽器版本
用jquery判斷瀏覽器型別 判斷瀏覽器型別是ie瀏覽器還是火狐甚至是opera或者蘋果瀏覽器safari,jquery 特效 如下 function else if browser.opera else if browser.mozilla else if browser.safari else ...
判斷瀏覽器版本
描述 判斷瀏覽器資訊 編寫 littleqiang w 日期 2016.1.5 版本 v1.1 判斷當前瀏覽型別 function browsertype else if fieversion 8 else if fieversion 9 else if fieversion 10 else if ...