2009-08-11 2 views
3

특정 리비전에 대한 커밋 메시지를 얻는 방법을 알아 내려고하고 있습니다. 그것은 SvnLookClient 내가 SharpSVN은 'SvnLookClient'로 포스트 - 커밋 - 후크를 얻습니다.

은 내가 필요한 것 같습니다 SO 여기에 몇 가지 코드를 발견 필요한 아마도하지만 난 뭔가를 누락 될 것 같습니다 ..

코드 내가 (그래서 여기에) 발견 :

using (SvnLookClient cl = new SvnLookClient()) 
{ 
    SvnChangeInfoEventArgs ci; 

    //******what is lookorigin? do I pass the revision here?? 
    cl.GetChangeInfo(ha.LookOrigin, out ci); 


    // ci contains information on the commit e.g. 
    Console.WriteLine(ci.LogMessage); // Has log message 

    foreach (SvnChangeItem i in ci.ChangedPaths) 
    { 

    } 
} 

답변

3

SvnLook 클라이언트는 리포지토리 후크를 사용하기 위해 특별히 타겟팅됩니다. 그것은 커밋되지 않은 개정판에 대한 액세스를 허용하므로 다른 인수가 필요합니다. (이것은 'svnlook'명령과 동일한 SharpSvn입니다. 'svn'이 필요하면 SvnClient를 살펴보십시오.) * 리포지토리 경로 및 트랜잭션 이름 * 또는 저장소 경로 및 개정 번호

일예 :

봐 기원 중 하나입니다 사전 커밋 훅 (pre-commit hook)에서 개정판은 아직 커밋되지 않았으므로 평상시처럼 공개 URL을 통해 액세스 할 수 없습니다.

문서는 (사전 commit.tmpl에서) 말한다 :

# The pre-commit hook is invoked before a Subversion txn is 
# committed. Subversion runs this hook by invoking a program 
# (script, executable, binary, etc.) named 'pre-commit' (for which 
# this file is a template), with the following ordered arguments: 
# 
# [1] REPOS-PATH (the path to this repository) 
# [2] TXN-NAME  (the name of the txn about to be committed) 

SharpSvn을 제공하여 작업을 수행하는 데 도움을줍니다

당신을 위해 이러한 인수를 구문 분석
SvnHookArguments ha; 
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PostCommit, false, out ha)) 
{ 
    Console.Error.WriteLine("Invalid arguments"); 
    Environment.Exit(1); 
} 

. (이 경우 매우 간단하지만 고급 후크가 있습니다. 그리고 후크는 새로운 Subversion 버전에서 새로운 인수를받을 수 있습니다). 필요한 값은 ha의 .LookOrigin 속성에 있습니다.

특정 수정 버전 범위 (1234-4567)에 대한 로그 메시지를 보내려면 SvnLookClient를 보지 말아야합니다.

using(SvnClient cl = new SvnClient()) 
{ 
    SvnLogArgs la = new SvnLogArgs(); 
    Collection<SvnLogEventArgs> col; 
    la.Start = 1234; 
    la.End = 4567; 
    cl.GetLog(new Uri("http://svn.collab.net/repos/svn"), la, out col)) 
} 
0

네, 아니요,이 코드를 가지고 있다고 생각합니다. 나중에 게시하겠습니다. SharpSVN은 틀림없이 (IMHO) 혼란스러운 API를 가지고 있습니다.

당신이 생각하는 .log (SvnClient의), 또는 이와 유사한, 당신이 개정판을 전달할 것 같아요.

+0

SvnLookClient는 'svnlook'응용 프로그램과 동일한 라이브러리입니다. 이 클래스는 (svnlook과 마찬가지로) 저장소 훅에서 사용하도록 설계되었습니다. –

1

참고로 저는 Bert의 응답을 기반으로 C# 함수를 만들었습니다. Bert에게 감사드립니다!

public static string GetLogMessage(string uri, int revision) 
{ 
    string message = null; 

    using (SvnClient cl = new SvnClient()) 
    { 
     SvnLogArgs la = new SvnLogArgs(); 
     Collection<SvnLogEventArgs> col; 
     la.Start = revision; 
     la.End = revision; 
     bool gotLog = cl.GetLog(new Uri(uri), la, out col); 

     if (gotLog) 
     { 
      message = col[0].LogMessage; 
     } 
    } 

    return message; 
} 
관련 문제