Управление сервером VisualSVN из C#

Я установил сервер VisualSVN 2.5.4. Я могу создать пользователя и репозиторий. Мой вопрос: как я могу создать/удалить пользователя/репозиторий из C#. Здесь есть библиотека?

1 ответов


03/09/2015 обновление

больше нет необходимости писать пользовательские сценарии WMI; командлеты PowerShell, доступные начиная с VisualSVN Server 3.4, охватывают большинство случаев использования Subversion server administration и repositories management. Читайте о новой функции вhttps://www.visualsvn.com/server/features/powershell/

VisualSVN Server 3.4 представляет модуль PowerShell, который предоставляет вам ряд полезных командлетов. Командлеты могут быть используется для администрирования сервера VisualSVN и его репозиториев локально или удаленно. Вот это полная ссылка на командлеты PowerShell сервера VisualSVN.

например,

  • вы можете создать новый репозиторий MySuperRepo выполнив эту команду PowerShell:

    New-SvnReposiory MySuperRepo

  • вы можете создать структуру проекта в хранилище

    New-SvnRepositoryItem MySuperRepo -Path /branches, /tags, /trunk -Type Folder

  • вы можете предоставить учетной записи DOMAIN\Developers Active Directory group доступ для чтения / записи в новый репозиторий

    Add-SvnAccessRule MyRepo -Path / -AccountName DOMAIN\Developers -Access ReadWrite

  • вы можете рассчитать размер репозитория на диске:

    Measure-SvnRepository MySuperRepo

  • вы можете проверить репозиторий на наличие повреждений:

    Test-SvnRepository MySuperRepo

    и гораздо, гораздо больше!

для получения дополнительной информации и полного списка командлетов, прочитайте статью Справочник По Командлету PowerShell Сервера VisualSVN.


сервер VisualSVN можно управлять через WMI (управление Windows Инструментальный интерфейс).

MOF файл, который описывает интерфейс сервера VisualSVN находится в %VISUALSVN_SERVER%\WMI на компьютере, где Клиента VisualSVN сервер установленный. Используя этот файл в качестве ссылки вы можете напишите сценарий C# для управления сервером VisualSVN.

пожалуйста, проверьте статью MSDN: http://msdn.microsoft.com/en-us/library/bb404655

я включаю следующие образцы для вашей ссылки:

  • этот код c# создаст пользователя Subversion ' user1 'с паролем'secret'.

        ManagementClass userClass = new ManagementClass("root\VisualSVN", "VisualSVN_User", null);
    
        // Obtain in-parameters for the method
        ManagementBaseObject inParams =
            userClass.GetMethodParameters("Create");
    
        // Add the input parameters.
        inParams["Name"] = "user1";
        inParams["Password"] = "secret";
    
        // Execute the method and obtain the return values.
        ManagementBaseObject outParams =
            userClass.InvokeMethod("Create", inParams, null);
    
  • этот код c# создаст новый репозиторий 'Repo1'.

        ManagementClass repoClass = new ManagementClass("root\VisualSVN", "VisualSVN_Repository", null);
    
        // Obtain in-parameters for the method
        ManagementBaseObject inParams =
            repoClass.GetMethodParameters("Create");
    
        // Add the input parameters.
        inParams["Name"] = "Repo1";
    
        // Execute the method and obtain the return values.
        ManagementBaseObject outParams =
            repoClass.InvokeMethod("Create", inParams, null);
    
  • этот код C# предоставит SID S-1-5-32-545 ('BUILTIN\Users') с Доступ для чтения / записи в репозиторий "Test". FYI: значения уровня доступа как описано в MOF:"0 - нет доступа 1 - только для чтения, 2 - Чтение/запись".

    ManagementClass userClass = new ManagementClass("root\VisualSVN", "VisualSVN_WindowsAccount", null);                            
    ManagementClass authzClass = new ManagementClass("root\VisualSVN", "VisualSVN_SecurityDescriptor", null);
    ManagementClass permClass = new ManagementClass("root\VisualSVN", "VisualSVN_PermissionEntry", null);
    
    ManagementObject userObject = userClass.CreateInstance();
    userObject.SetPropertyValue("SID", "S-1-5-32-545");
    
    ManagementObject permObject = permClass.CreateInstance();
    permObject.SetPropertyValue("Account", userObject);
    permObject.SetPropertyValue("AccessLevel", 2);
    
    ManagementObject repo = new ManagementObject("VisualSVN_Repository.Name='Test'");
    
    ManagementBaseObject inParams =
        authzClass.GetMethodParameters("SetSecurity");
    
    inParams["Object"] = repo;
    inParams["Permissions"] = new object[] { permObject };
    
    ManagementBaseObject outParams =
        authzClass.InvokeMethod("SetSecurity", inParams, null);
    

Обновлено 02/10/2013:

схема WMI была изменена (и улучшена!) в VisualSVN Server 2.6. Короче говоря, чтобы установить доступ разрешения на путь к репозиторию, вы должны:

  • создать VisualSVN_Repository объект класса, указывающий имя репозитория,
  • создать VisualSVN_PermissionEntry объект ввода, указывающий имя пользователя учетной записи и права доступа,
  • invoke SetSecurity метод on VisualSVN_Repository передача допустимого пути репозитория и объекта PermissionEntry.

        ManagementClass userClass = new ManagementClass("root\VisualSVN", "VisualSVN_WindowsAccount", null);
        ManagementClass permClass = new ManagementClass("root\VisualSVN", "VisualSVN_PermissionEntry", null);
        ManagementClass repoClass = new ManagementClass("root\VisualSVN", "VisualSVN_Repository", null);
    
        ManagementObject userObject = userClass.CreateInstance();
        userObject.SetPropertyValue("SID", "S-1-5-32-545");
    
        ManagementObject permObject = permClass.CreateInstance();
        permObject.SetPropertyValue("Account", userObject);
        permObject.SetPropertyValue("AccessLevel", 2);
    
        ManagementObject repoObject = repoClass.CreateInstance();
        repoObject.SetPropertyValue("Name", "MyProject");
    
        ManagementBaseObject inParams =
            repoClass.GetMethodParameters("SetSecurity");
    
        inParams["Path"] = "/trunk";
        inParams["Permissions"] = new object[] { permObject };
    
        ManagementBaseObject outParams =
            repoObject.InvokeMethod("SetSecurity", inParams, null);