1
using (SvnClient client = new SvnClient())
{
    client.Commit(_targetPath, commitArgs);

    SvnInfoEventArgs result;
    client.GetInfo(_targetPath, out result);

    SvnLogArgs args = new SvnLogArgs();
    args.Start = new SvnRevision(result.L​astChangeRevision);
    args.End = new SvnRevision(result.Revision);

    Collection<SvnLog​EventArgs> logitems;
    client.GetLog(_targetPath, args, out logitems);

    foreach (SvnLogEventArgs logentry in logitems)
    {
        string author = logentry.Author;
        string message = logentry.LogMessage;
        DateTime checkindate = logentry.Time;
        AddMessage(string.Fo​rmat("Commited successfully by {0} on {1} for message: {2}", author, checkindate, message));
    }
}

これは私のコードですが、1 つのログエントリしか取得できません。リビジョン範囲のすべてのログのパスである必要があります。何が問題ですか?

4

3 に答える 3

1

このAPIについては何も知りませんが、最後の変更リビジョンと現在のリビジョンの間の範囲でGetLogを呼び出しているようです。直感的には、これは定義上、単一のログエントリにすぎないと思います。

だから私の考えはあなたの改訂範囲が間違っているということです。予想されるリビジョン範囲をハードコーディングして、結果が予想を満たしているかどうかを確認してみませんか。

于 2011-02-21T03:32:30.277 に答える
1

あなたがやろうとしていることは、作業コピーをコミットしているときに変更されたファイルをリストすることだと思います。つまり、コミットされたときにファイルの通知を表示します。これを行うには、あなたがしていることよりもはるかに良い方法があります:

using (SvnClient client = new SvnClient())
{
    // Register the notify event, to get notified of any actions
    client.Notify += (sender, eventArgs) => AddMessage(
        string.Format("Changed path,{0},by action,{1}",
            eventArgs.Path,
            eventArgs.Action));

    client.Commit(_targetPath, commitArgs);
}

Notifyイベント、詳細SvnNotifyEventArgsはこちらをご覧ください。

さらに、type のパラメーターをCommit持つオーバーロードを使用することもできます。outSvnCommitResult

SvnCommitResult commitResult;
client.Commit(_targetPath, commitArgs, out commitResult);

Console.WriteLine(string.Format(
    "{0} commited revision {1} at time {2}", 
    commitResult.Author, 
    commitResult.Revision, 
    commitResult.Time));
于 2011-02-22T23:19:21.107 に答える
-1

さて、私は以下のコードから欲しいものを手に入れました:

using (SvnClient client = new SvnClient())
{
    try
    {
        client.Commit(_targetPath, commitArgs);
        SvnLogArgs args = new SvnLogArgs();

        // get latest changed version
        SvnWorkingCopyClient workingCopyClient = new SvnWorkingCopyClient();
        SvnWorkingCopyVersion version;

        workingCopyClient.GetVersion(_targetPath, out version);
        long localRev = version.End;
        args.Start = new SvnRevision(localRev);
        args.End = new SvnRevision(localRev);

        //get latest log
        Collection<SvnLogEventArgs> logitems;
        client.GetLog(_targetPath, args, out logitems);
        if (logitems.Count > 0)
        {
            foreach (SvnChangeItem path in logitems[0].ChangedPaths)
            {
                AddMessage(string.Format("Changed path,{0},changed on,{1},by action,{2}", path.Path, logitems[0].Time, path.Action));
            }
        }

        WriteLogFile(messageLog.ToString());
    }
    catch (SvnException ex)
    {

    }

}
于 2011-02-22T04:13:01.410 に答える