Мы используем VisualSVN (стандартная версия) уже несколько лет без каких-либо проблем. У нас есть приложение C#, которое хранит данные в SVN. Он использует библиотеку SharpSvn (https://sharpsvn.open.collab.net) для доступа к SVN. Время от времени приложение выполняет серверную команду SVN COPY («RemoteCopy» SharpSvn), чтобы создать ветку на основе ряда существующих в репозитории файлов.
Недавно мы обновили VisualSVN с версии 2.5.2 до 3.2.2, а также приобрели лицензию, чтобы разблокировать корпоративные функции продукта. Мы включили встроенную проверку подлинности Windows, но также сохранили обычную проверку подлинности для обратной совместимости.
После недели работы без каких-либо проблем (выполнение только чтения из SVN) наше приложение попыталось выполнить копирование в первый раз, и оно потерпело неудачу со следующей ошибкой, жалующейся на один из файлов, которые нужно было скопировать:
«Запрос COPY на ‘/svn/repository/!svn/rvr/12345/trunk/file.xml’ не выполнен: метод 501 не реализован»
Журнал сервера показывает следующее:
Level,Date and Time,Source,Event ID,Task Category
Error,2015-03-03 9:37:26 AM,VisualSVN Server 3.2,1001,Apache,"Multi-author commits not supported. [501, #175002] [client 192.168.1.100]"
Error,2015-03-03 9:37:26 AM,VisualSVN Server 3.2,1001,Apache,"Could not fetch resource information. [501, #0] [client 192.168.1.100]"
Error,2015-03-03 9:37:26 AM,VisualSVN Server 3.2,1001,Apache,"SSPI Challenge failed: The token supplied to the function is invalid [client 192.168.1.100]"
Error,2015-03-03 9:37:21 AM,VisualSVN Server 3.2,1001,Apache,"SSPI Challenge failed: The token supplied to the function is invalid [client 192.168.1.100]"
После перезапуска службы VisualSVN команда выполнилась без проблем. Такого никогда не было со старыми версиями VisualSVN.
Вот как мы создаем ветку с помощью SharpSvn:
private static void Branch(ICollection<SvnUriTarget> sources, Uri targetUri, string comment, string userName, string password)
{
if (sources == null) throw new ArgumentNullException("sources");
if (targetUri == null) throw new ArgumentNullException("targetUri");
if (comment.IsNullEmptyOrSpaces()) throw new ArgumentNullException("comment");
if (userName.IsNullEmptyOrSpaces()) throw new ArgumentNullException("userName");
if (password.IsNullEmptyOrSpaces()) throw new ArgumentNullException("password");
using (var client = new SvnClient())
{
client.Authentication.Clear();
client.Authentication.DefaultCredentials = new NetworkCredential(userName, password);
client.Authentication.SslServerTrustHandlers += (sender, e) => { e.AcceptedFailures = e.Failures; e.Save = true; };
SvnCommitResult commitResult;
if (!client.RemoteCopy(sources, targetUri, new SvnCopyArgs { CreateParents = true, LogMessage = comment }, out commitResult))
throw new ApplicationException("Failed to create tag/branch in Repository");
}
}
В нашем приложении мы по-прежнему используем обычную аутентификацию, и учетные данные явно передаются при каждом вызове SharpSvn. Приложение запрашивает учетные данные у пользователя, а затем использует эти учетные данные для выполнения одного вызова метода «Ветвь». Два разных пользователя пытались сделать это, используя свои собственные учетные данные на двух разных машинах, с одинаковым результатом. Только перезапуск службы VisualSVN решил проблему. Боюсь, что эта проблема может вернуться снова...
sources
имеет 1800 записей? - person Ivan Zhakov   schedule 31.03.2015