2

私はSharpSVNとSVN全般に不慣れです。ユーザーが特定の種類の XML ファイルをコミットするときに使用する pre-commit フックを実装しようとしています。ファイルのコミットを許可する前に、ファイルを傍受して分析し、特定の要素が含まれていることを確認する必要があります。

SVN は 2 つの引数を送信しているようです。リポジトリ パスとトランザクション。ファイルをインターセプトするには、これら 2 つのアイテムを使用する必要があります。これら2つのパラメータに基づいてファイル情報を取得するためにSharpSVNで何を使用する必要があるか知っている人はいますか?

ありがとう、ノミ#

4

1 に答える 1

3

ビルトインを使用してこれを行うことができますSvnLookClient

これを使用するには、まずSvnLookOrigin. SharpSvn には、各タイプのフックに渡される引数を「認識する」標準の引数解析が含まれています。これにより、これにアクセスできますSvnLookOrigin

SvnHookArguments ha; 
if (!SvnHookArguments.ParseHookArguments(args, SvnHookType.PreCommit, false, out ha))
{
    Console.Error.WriteLine("Invalid arguments");
    Environment.Exit(1);  
}

解析された引数に基づいて、変更されたファイルとそれらのファイルの内容を取得する

using (SvnLookClient cl = new SvnLookClient())
{
    Collection<SvnChangedEventArgs> changedItems;
    cl.GetChanged(ha.LookOrigin, out changedItems);

    foreach(var item in changedItems)
    {
        if(!IsXmlFile(item)) continue;

        using(MemoryStream ms = new MemoryStream())
        {
            cl.Write(ha.LookOrigin, item.Path, stream);

            VerifyXMLStream(stream);
        }
    }
}

編集: 書き込みConsole.ErrorおよびEnvironment.Exit(1)エラーの報告 (null 以外で終了)。

于 2010-01-15T22:29:15.090 に答える