SharpSvn получает перехват после фиксации с помощью 'SvnLookClient'

StackOverflow https://stackoverflow.com/questions/1258191

  •  12-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь выяснить, как получить сообщение о фиксации для конкретной ревизии.Похоже, SvnLookClient - это, вероятно, то, что мне нужно

Я нашел здесь некоторый код на SO, который выглядит так, как мне нужно, но, кажется, я чего-то не понимаю..

Код, который я нашел (здесь, на 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 специально предназначен для использования в перехватах репозитория.Он разрешает доступ к незафиксированным версиям и, следовательно, нуждается в других аргументах.(Это SharpSvn эквивалент команды 'svnlook'.Если вам нужен эквивалент 'svn', вам следует посмотреть на SvnClient).

Источником взгляда является либо:* Путь к репозиторию и имя транзакции * или путь к репозиторию и номер редакции

Например.в перехватчике предварительной фиксации редакция еще не зафиксирована, поэтому вы не можете получить к ней доступ по общедоступному 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).Нужное вам значение содержится в .Свойство LookOrigin для ha.

Если вы просто хотите получить сообщение журнала для определенного диапазона версий (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))
}

Другие советы

К вашему сведению, я создал функцию 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.

Я думаю, вы хотите .Журнал (SvnClient) или аналогичный, передающий нужную вам ревизию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top