SharpSvn получает перехват после фиксации с помощью 'SvnLookClient'
-
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) или аналогичный, передающий нужную вам ревизию.