SharpSVN получает хук после фиксации с помощью «SvnLookClient»

Я пытаюсь понять, как получить сообщение фиксации для конкретной версии. Похоже, 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)
    {

    }
}

person KevinDeus    schedule 11.08.2009    source источник


Ответы (3)


Клиент SvnLook специально предназначен для использования в хуках репозитория. Он разрешает доступ к незафиксированным ревизиям и поэтому требует других аргументов. (Это эквивалент команды 'svnlook' в SharpSvn. Если вам нужен эквивалент '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))
}
person Bert Huijben    schedule 11.08.2009

К вашему сведению, я сделал функцию С# на основе ответа Берта. Спасибо, Берт!

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;
}
person KevinDeus    schedule 11.08.2009

Да нет, я думаю, что у меня есть код для этого, я опубликую его позже. SharpSVN имеет, возможно, (ИМХО) запутанный API.

Я думаю, вы хотите, чтобы .Log (из SvnClient) или аналогичный передавался в нужной вам редакции.

person Noon Silk    schedule 11.08.2009
comment
SvnLookClient — это библиотека, эквивалентная приложению svnlook. Этот класс был разработан для использования хуков из репозитория (так же, как svnlook). - person Bert Huijben; 11.08.2009