3

特定のリビジョンのコミット メッセージを取得する方法を見つけようとしています。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)
    {

    }
}
4

3 に答える 3

3

SvnLook クライアントは、特にリポジトリ フックで使用することを目的としています。コミットされていないリビジョンへのアクセスを許可するため、他の引数が必要です。(これは「svnlook」コマンドに相当する SharpSvn です。「svn」に相当するものが必要な場合は、SvnClient を参照してください)。

ルックオリジンは次のいずれかです: * リポジトリパスとトランザクション名 * またはリポジトリパスとリビジョン番号

たとえば、pre-commit フックでは、リビジョンはまだコミットされていないため、通常のように公開 URL 経由でアクセスすることはできません。

ドキュメントには次のように記載されています(pre-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))
}
于 2009-08-11T08:53:01.850 に答える
1

参考までに、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;
}
于 2009-08-11T15:31:20.740 に答える
0

いいえ、コードはあると思います。後で投稿します。SharpSVN には間違いなく (IMHO) 紛らわしい API があります。

.Log (SvnClient の)、または同様のものが必要だと思います。あなたが求めているリビジョンを渡します。

于 2009-08-11T06:02:56.113 に答える