Почему мой клиент SharpSVN возвращает только часть URI репозитория?

Надеюсь, это не слишком расплывчато. Я пишу приложение для запуска после фиксации на нашем сервере SVN. Когда я запрашиваю URI репозитория, я иногда получаю ответ, который не соответствует пути моего коммита.

Вот как я получаю аргументы фиксации в целом (отредактировано, чтобы добавить больше деталей):

public Collection<SvnLogEventArgs> GetCommitArgs(string strUri, long lngRevision)
{ 
    try
        {
            using (SvnClient client = new SvnClient())
            {
                SvnLogArgs args = new SvnLogArgs();
                Collection<SvnLogEventArgs> col;
                args.Start = lngRevision;
                args.End = lngRevision;
                bool bolGotLog = client.GetLog(new Uri(strUri), args, out col);
                return col;
            }
        }
        catch
        {
            return null;
        }
    }

Но вот как я получаю URI репозитория (GetRepository () просто переформатирует его, чтобы он выглядел как URL-адрес):

colCommitArgs = GetCommitArgs(args[0], long.Parse(args[1]));
strRepository = GetRepository(args[0] + "/" + colCommitArgs[0].ChangedPaths[0].RepositoryPath.ToString());

args[0] на самом деле относится к набору аргументов, переданных из фиксации. Я обнаружил, что ChangedPaths иногда бывает пустым.

Например, если я фиксирую C: /Repositories/a_repo/somefolder/example.txt, значение, которое я получаю из аргументов фиксации SVN, будет просто C:/Repositories/a_repo/. Это может быть проблема с нашей настройкой SVN (или моим непониманием этого). Почему одни папки считаются репозиториями, а другие - просто папками? Есть ли способ указать, что папка - это не просто папка? Или в SharpSVN есть другой способ получить зафиксированную папку? В настоящее время я объединяю ChangedPaths[0].RepositoryPath в конец моего исходного URI.


person mrcoulson    schedule 05.10.2015    source источник
comment
Ваш код действительно не соответствует тексту вашего вопроса. Пожалуйста, покажите код, который дает C:/Repositories/a_repo/, и, пожалуйста, покажите код, в котором вы объединяете ChangedPaths[0].RepositoryPath.   -  person Daniel Hilgarth    schedule 05.10.2015
comment
Я добавил дополнительный код. Спасибо!   -  person mrcoulson    schedule 06.10.2015
comment
.ChangedPaths будет иметь значение null, если вы не передадите .RetrievePaths как true через необязательный объект SvnLogArgs.   -  person Bert Huijben    schedule 23.10.2015
comment
Но при обработке фиксации через ловушку вы обычно хотите использовать SvnLookClient вместо обычного SvnClient. Существует даже прямая поддержка синтаксического анализа командной строки для скриптов в классе SvnHookArguments.   -  person Bert Huijben    schedule 23.10.2015


Ответы (1)


Я мало что знаю о библиотеке C #, которую вы используете, но с общей точки зрения Subversion вам обычно нужно использовать два разных номера ревизии для просмотра изменений. Попробуйте использовать args.Start = lngRevision - 1; и посмотрите, что произойдет.

person bta    schedule 07.10.2015