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