Как установить автора фиксации SVN с помощью библиотеки SharpSVN в С#

Я использую библиотеку SharpSvn от CollabNET. Я хотел бы установить автора ревизии при фиксации, но я всегда получаю фиксацию с моим именем пользователя Windows.

Это не работает для меня:

System.Net.NetworkCredential oCred = new
    System.Net.NetworkCredential("user"​, "pass");
client.Authentication.DefaultCredentials = oCred;

Я также пробовал:

client.SetProperty("", "svn:author", "user");

Но я получаю сообщение об ошибке, что цель (первый аргумент) неверна.

Не могли бы вы рассказать мне, как установить пользователя (автора) фиксации в репозиторий subversion в С#?


person Tomasz Smykowski    schedule 05.05.2009    source источник
comment
Вы должны использовать .SetRevisionProperty() для изменения свойств ревизии.   -  person Bert Huijben    schedule 05.05.2009


Ответы (1)


Все зависит от того, как вы подключаетесь к своему репозиторию, так как репозиторий отвечает за добавление имени пользователя в ревизию. (Обычно он копирует учетные данные для соединений, но это не обязательно).

Когда вы используете репозиторий file:/// (что обычно не рекомендуется — см. Книгу Subversion) вы можете обойти это непосредственно в коммите.

using (SvnClient client = new SvnClient())
{
    client.Authentication.Clear(); // Clear predefined handlers

    // Install a custom username handler
    client.Authentication.UserNameHandlers +=
        delegate(object sender, SvnUserNameEventArgs e)
        {
            e.UserName = "MyName";
        };

    SvnCommitArgs ca = new SvnCommitArgs { LogMessage = "Hello" }
    client.Commit(dir, ca);
}

Если вы подключаетесь к удаленному репозиторию, вы можете изменить автора ревизии, когда в репозитории установлен хук pre-revprop-change (см. Книга Subversion)

using (SvnClient client = new SvnClient())
{
    client.SetRevisionProperty(new Uri("http://my/repository"), 12345,
                              SvnPropertyNames.SvnAuthor,
                              "MyName");

    // Older SharpSvn releases allowed only the now obsolete syntax
    client.SetRevisionProperty(
        new SvnUriTarget(new Uri("http://my/repository"), 12345),
        SvnPropertyNames.SvnAuthor,
        "MyName");

}

[2009-08-14] Более поздние выпуски SharpSvn также позволяют это:

using (SvnRepositoryClient rc = new SvnRepositoryClient())
{
   SvnSetRevisionPropertyRepositoryArgs ra;
   ra.CallPreRevPropChangeHook = false;
   ra.CallPostRevPropChangeHook = false;
   rc.SetRevisionProperty(@"C:\Path\To\Repository", 12345,
                         SvnPropertyNames.SvnAuthor, "MyName", ra);
}

В этом последнем примере предполагается прямой доступ к файлу в репозиторий, но для оптимальной производительности он обходит перехватчики репозитория.

person Bert Huijben    schedule 05.05.2009