2010-01-15 108 views
2

我是SharpSVN和SVN的新手。我試圖實現一個預先提交的鉤子,當用戶提交某種類型的XML文件時;我將需要攔截該文件並對其進行分析,以確保它們包含某些元素,然後才允許提交文件。如何使用SharpSVN訪問預提交鉤子中的文件信息

由於SVN似乎提交了兩個參數,存儲庫路徑和事務;我將需要使用這兩個項目來攔截文件。有誰知道我需要在SharpSVN中使用什麼來獲取基於這兩個參數的文件信息?

感謝, 舊貨#

回答

4

您可以通過使用內置SvnLookClient做到這一點。

要使用此功能,首先您需要一個SvnLookOrigin。 SharpSvn包含標準參數解析,它可以「知道」傳遞給每種鉤子的參數。這使您可以訪問此SvnLookOrigin

SvnHookArguments ha; 
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PreCommit, false, out ha)) 
{ 
    Console.Error.WriteLine("Invalid arguments"); 
    Environment.Exit(1); 
} 

獲取已更改的文件和內容基礎上,分析論證

using (SvnLookClient cl = new SvnLookClient()) 
{ 
    Collection<SvnChangedEventArgs> changedItems; 
    cl.GetChanged(ha.LookOrigin, out changedItems); 

    foreach(var item in changedItems) 
    { 
     if(!IsXmlFile(item)) continue; 

     using(MemoryStream ms = new MemoryStream()) 
     { 
      cl.Write(ha.LookOrigin, item.Path, stream); 

      VerifyXMLStream(stream); 
     } 
    } 
} 

編輯這些文件:寫入Console.ErrorEnvironment.Exit(1)報告錯誤(退出非空)。