使用SvnClient实现更快的svn cat

时间:2009-05-06 11:54:08

标签: .net sharpsvn

我正在寻找一种比SVN中的svn cat更快的方法来检索SVN中的文件。

目前我正在为每个版本运行一个svn cat进程,但它非常慢。

然后我尝试使用SvnClient:

    Stream st = Console.OpenStandardOutput();

    SvnWriteArgs wargs = new SvnWriteArgs();

    for (int i = 3140; i < 3155; ++i)
    {
        wargs.Revision = i;

        client.Write(new SvnUriTarget("http://filezilla.svn.sourceforge.net/svnroot/filezilla/FileZilla3/trunk/README"), st, wargs);
    }
    st.Flush();

但每次迭代都比svn cat慢。

SvnClient中是否有办法“重用”以前打开的SVN服务器连接,以便可以更快地运行多猫操作?

1 个答案:

答案 0 :(得分:4)

您可以使用FileVersions命令执行此操作。这将使用单个连接中的每个修订之间的差异来获取一个完整文件和所有其他文件。这应该会带来不错的性能提升。

public void WriteRevisions(SvnTarget target, SvnRevision from, SvnRevision to)
{
    using(SvnClient client = new SvnClient())
    {
        SvnFileVersionsArgs ea = new SvnFileVersionsArgs 
            {
                Start = from,
                End = to
            };

        client.FileVersions(target, ea,
            delegate(object sender2, SvnFileVersionEventArgs e)
                {
                    Debug.WriteLine(e.Revision);
                    e2.WriteTo(...);
                 });
    }
}

这需要支持此功能的服务器。我不太确定它何时推出,但是运行SvnBridge的Codeplex不支持它。如果我没记错的话,在这种情况下只调用一次委托,那么在这种情况下你将不得不重新使用第一个解决方案。在正常情况下,代理人会在开始和结束之间调用每个修订版。

请参阅this testcase中的方法WalkMe(以及其他方法)以查看有关其用法的更多详细信息(用户名来宾,无密码)。