2010-01-15 97 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)报告错误(退出非空)。

相关问题