2009-05-06 21 views
3

.NETのsvn catよりもSVNからファイルを取得する方法を探しています。SvnClientを使ってより速いsvn catを実装する

現在、私はそれぞれのリビジョンでsvn catプロセスを実行していますが、非常に遅いです。

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の猫よりもさらに遅い:

は、それから私はSvnClientで試してみました。

複数のcat操作をより高速に実行できるように、SVNサーバーへの以前に開いた接続をSvnClientで「再利用」する方法はありますか?

答えて

4

これを行うには、FileVersionsコマンドを使用できます。これは、1つの完全なファイルと、他のすべてのファイルを単一の接続の各リビジョン間の違いを使用してフェッチします。これにより、パフォーマンスが向上します。

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(...); 
       }); 
    } 
} 

この機能をサポートするサーバーが必要です。私はそれがいつ導入されたのかは分かりませんが、CodeplexはSvnBridgeを実行していてもそれをサポートしていません。私が正しく覚えていれば、デリゲートはその場合に一度だけ呼び出されます。その場合は、最初の解決策に戻す必要があります。通常の環境下では、開始と終了の間のリビジョンごとにデリゲートが呼び出されます。

WalkMe(など)をthis testcaseに表示すると、その使用方法(ユーザー名ゲスト、パスワードなし)の詳細が表示されます。

+0

これは非常に古いと知っていますが、私は "e2"がタイプミスであり、shouleが "e"であると仮定していますか?テストケースへのリンクは機能しません。そして、単に "..."の代わりに、WriteTo()メソッドのサンプル引数でうまくいくでしょう。 – RenniePet

関連する問題