如何使用SharpSVN在预提交钩子中访问文件信息

时间:2010-01-15 21:23:15

标签: svn sharpsvn pre-commit-hook

我是SharpSVN和SVN的新手。我正在尝试实现一个预提交钩子,当用户提交某种类型的XML文件时;我将需要拦截文件并对其进行分析,以确保在允许文件提交之前它们包含某些元素。

因为SVN似乎提交了两个参数;存储库路径和事务;我将需要使用这两个项来拦截文件。有没有人知道我需要在SharpSVN中使用什么来获取基于这两个参数的文件信息?

谢谢, 跳蚤#

1 个答案:

答案 0 :(得分: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)报告错误(退出非空)。