SharpSVN получает post-commit-hook с помощью 'SvnLookClient' - PullRequest
3 голосов
/ 11 августа 2009

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

    }
}

Ответы [ 3 ]

3 голосов
/ 11 августа 2009

Клиент 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))
}
1 голос
/ 11 августа 2009

К вашему сведению, я сделал функцию 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;
}
0 голосов
/ 11 августа 2009

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

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

...