2009-05-06 4 views
3

.NET에서 svn cat보다 SVN에서 파일을 검색하는 더 빠른 방법을 찾고 있습니다.SvnClient를 사용하여 더 빠른 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의 고양이보다 더 느립니다.

SVN 서버에 이전에 열린 연결을 "재사용"하여 다중 고양이 작업을 더 빠르게 실행할 수있는 방법이 있습니까?

답변

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는이를 지원하지 않습니다. 내가 올바르게 기억한다면 위임자는이 경우에 한 번만 호출됩니다.이 경우 첫 번째 솔루션으로 되돌려 야합니다. 정상적인 상황에서는 시작과 끝 사이의 각 수정본에 대해 대리인이 호출됩니다.

WalkMe (및 기타)를 this testcase으로 보면 사용법에 대한 자세한 내용 (Username guest, no password)을 볼 수 있습니다.

+0

나는 이것이 매우 오래된 것을 알고 있지만 ... "e2"는 오타이고 shoule은 "e"라고 가정합니다. 그리고 테스트 케이스에 대한 링크가 작동하지 않습니다. 그리고 "..."대신에 WriteTo() 메서드에 대한 샘플 인수를 사용하는 것이 좋습니다. – RenniePet