2009-08-11 19 views
3

特定のリビジョンのコミットメッセージを取得する方法を理解しようとしています。SharpSVNが 'SvnLookClient'でコミット後のフックを取得する

:SvnLookClient私は

必要なものはおそらくあるように見えます私は(ここではそうで)見つけだから、私は必要なもののように見えますが、私は何かが欠けているように見える。..

コードにここにいくつかのコードを見つけました

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を参照してください)。

ルック起源のいずれかである:例えば *リポジトリパスおよびトランザクション名 *またはリポジトリのパスとリビジョン番号

プリコミットフックでは、リビジョンはまだコミットされていないので、通常通りに公開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があります。

私は、(あなたはSvnClientの)ログ、またはそれに類するものを、あなたが行っているリビジョンに入れたいと思うと思います。

+0

SvnLookClientは 'svnlook'アプリケーションに相当するライブラリです。このクラスは、(svnlookと同様に)リポジトリフックから使用するように設計されています。 –

1

FYI、私はBertの応答に基づいてC#関数を作成しました。ありがとうバート!

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; 
} 
関連する問題