「SvnLookClient」でポストコミットフックを得るSharpSVN
-
12-09-2019 - |
質問
私は特定のリビジョンのコミットメッセージを取得する方法を把握しようとしています。それは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)
{
}
}
解決
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のバージョンでは、新たな引数を受け取ることができます)。あなたが必要とする値は、ヘクタールの.LookOriginプロパティである。
あなたはちょうどあなたがSvnLookClientで見てはいけない特定のリビジョンの範囲(1234から4567)のログメッセージを持っているしたい場合。
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))
}
他のヒント
FYI、私はバートの応答に基づいて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;
}
うん、いや、私は、このためのコードを持っていると思う、私は後でそれを投稿します。 SharpSVNは間違いなく(私見)紛らわしいAPIを持っています。
私はあなたが後にしているリビジョンに渡し、.LOG(SvnClientの)、または類似をしたいと考えています。