Как я могу получить сообщение журнала SVN - PullRequest
1 голос
/ 21 февраля 2011
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));
    }
}

Это мои коды, но я могу получить только один журнал, это должен быть путь ко всем журналам для диапазона ревизий, в чем проблема?

Ответы [ 3 ]

1 голос
/ 23 февраля 2011

Я думаю, что вы пытаетесь сделать список измененных файлов при фиксации рабочей копии, т.е. показывать уведомления о файлах по мере их фиксации. Есть гораздо лучший способ сделать это, чем то, что вы делаете:

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.

Кроме того, вы также можете использовать перегрузку Commit с параметром out типа SvnCommitResult:

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));
1 голос
/ 21 февраля 2011

Я ничего не знаю об этом API, но похоже, что вы вызываете GetLog с диапазоном между последней ревизией изменения и текущей ревизией.Инстинктивно, я бы подумал, что это будет только одна запись журнала по определению.

Так что я думаю, что ваш диапазон ревизий неверен.Почему бы вам не попробовать тщательно кодировать ожидаемый диапазон ревизий и посмотреть, соответствуют ли результаты вашим ожиданиям.

0 голосов
/ 22 февраля 2011

хорошо, теперь у меня есть то, что я хочу, из следующих кодов:

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)
    {

    }

}
...