改进的SVN的Commit权限控制
源代碼管理軟件Subversion是繼CVS后的又一個(gè)強(qiáng)力開源軟件,現(xiàn)最新版本為1.2,開始支持lock模式了。(更堅(jiān)定了我 使用它的決心)而當(dāng)我們使用它的svnserve提供服務(wù)時(shí),要實(shí)現(xiàn)目錄級(jí)的驗(yàn)證需要用到pre-commit這個(gè)hook。很感謝 hbifts為我們提供了實(shí)現(xiàn)的思路和代碼(參見下面的文章鏈接)。我寫的 程序也是基于他的solution修改而成的。
下面我說說我的改進(jìn)的地方:
1、精簡(jiǎn)svnhandler.cs。感覺原來的這個(gè)比較亂,現(xiàn)在精簡(jiǎn)后只保留兩個(gè)獲取author和commit files的公共方法。
2、當(dāng)權(quán)限不足,拒絕提交時(shí),除退出碼設(shè)為非零外,同時(shí)向stderr標(biāo)準(zhǔn)錯(cuò)誤流輸出提示。這樣做提交者就有可能在客戶 端工具中看到出錯(cuò)提示(如使用TortoiseSVN),不至于讓人不知所然。
3、日志使用功能強(qiáng)大的開源log4net,方便日后的管理。(是不是有些大材小用?^_^)
4、最重要和大幅度的改進(jìn)就是權(quán)限判斷了。判斷的準(zhǔn)則是類似于目錄權(quán)限繼承。如要提交的文件是trunk/folder/file.cs, 那么首先判斷trunk/folder的權(quán)限,存在trunk/folder的規(guī)則則使用之,否則再查找trunk目錄的權(quán)限規(guī)則,一直到根目錄為 止(此例為trunk)。若無任何的規(guī)則存在,則默認(rèn)為可提交。(這個(gè)可根據(jù)你的需要修改程序)
為配合這種判斷準(zhǔn)則,相應(yīng)的配置文件也由ini改為xml。hbifts在他的文章最后提到過出于性能的考慮沒有采用xml。 不過我認(rèn)為svnserve一般應(yīng)用在局域網(wǎng)的場(chǎng)合內(nèi),提交的頻率不會(huì)太高,性能方面可以忽略。最重要的是xml更適用于上面 所說的判斷準(zhǔn)則。
接著說一下配置文件格式。根節(jié)點(diǎn)為“Rules”,下級(jí)節(jié)點(diǎn)為“Rule”。每個(gè)Rule節(jié)點(diǎn)代表對(duì)一個(gè)目錄的權(quán)限設(shè)定。它有 兩個(gè)屬性“Path”和“Default”。其中“Path”為必需項(xiàng),指定要指派權(quán)限的目錄名。“Default”為可選,指明當(dāng)前提交者 不匹配任何一個(gè)用戶名時(shí)默認(rèn)的權(quán)限。取值為“Allow”或“Deny”,默認(rèn)為“Allow”。“Rule”節(jié)點(diǎn)可帶有多個(gè)下級(jí)節(jié)點(diǎn)。 下級(jí)節(jié)點(diǎn)應(yīng)為“<Allow>……</Allow>”或“<Deny>……</Deny>”。每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)用戶名。若 當(dāng)前提交者匹配這個(gè)用戶名,則根據(jù)該節(jié)點(diǎn)名稱(Allow或Deny)來決定他可否進(jìn)行提交動(dòng)作。
由于這個(gè)程序沒試過在線調(diào)試,都是通過日志、實(shí)操和分析程序來調(diào)試的,所以可能還會(huì)有些Bug。歡迎各位捉蟲者多提寶 貴意見。
使用的方法就是把編譯生成的pre-commit.exe、log4net.dll、pre-commit.exe.config復(fù)制到Repository目錄下的hook目錄, 再新建一個(gè)XML配置文件就可以了。源碼中帶有一個(gè)簡(jiǎn)單的配置例子,可參考。
點(diǎn)擊下載源碼
參考資料:
轉(zhuǎn)載于:https://www.cnblogs.com/fking/archive/2005/06/16/175330.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的改进的SVN的Commit权限控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core 基础知识(十四
- 下一篇: Python3基础 if __name