Controle el Servidor VisualSVN desde C #

Instalé el Servidor VisualSVN 2.5.4. Puedo crear usuario y repository. Mi pregunta es cómo puedo crear / eliminar usuario / repository desde C #. ¿Hay alguna biblioteca?

Actualización 03/09/2015

Ya no es necesario escribir scripts WMI personalizados; Los cmdlets de PowerShell disponibles que comienzan con VisualSVN Server 3.4 cubren la mayoría de los casos de uso de administración de repositorys y administración de serveres de Subversion. Lea sobre la nueva característica en https://www.visualsvn.com/server/features/powershell/

VisualSVN Server 3.4 presenta el module PowerShell que le proporciona una cantidad de cmdlets útiles. Los cmdlets se pueden usar para administrar el server de VisualSVN y sus repositorys de forma local o remota. Aquí está la reference completa en los cmdlets de VisualSVN Server PowerShell .

Por ejemplo,

  • Puede crear un nuevo repository MySuperRepo ejecutando este command de PowerShell:

    New-SvnReposiory MySuperRepo

  • Puede crear una estructura de proyecto en el repository

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

  • Puede proporcionar una count de grupo DOMAIN \ Developers Active Directory con acceso de lectura / escritura al nuevo repository

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

  • Puede calcular el tamaño que el repository toma en el disco:

    Measure-SvnRepository MySuperRepo

  • Puede verificar el repository en busca de corrupciones:

    Test-SvnRepository MySuperRepo

    ¡Y mucho, mucho más!

Para get más información y la list completa de cmdlets, lea el artículo Referencia del cmdlet de VisualSVN Server PowerShell .


VisualSVN Server se puede administrar a través de la interfaz WMI (Instrumentación de administración de Windows).

El file MOF que describe la interfaz del server VisualSVN reside en % VISUALSVN_SERVER% \ WMI en la computadora donde está instalado el server VisualSVN. Usando este file como reference, puede escribir un script C # para administrar el Servidor VisualSVN.

Consulte el artículo de MSDN: http://msdn.microsoft.com/en-us/library/bb404655

Estoy incluyendo las siguientes muestras para su reference:

  • Este código de C # creará un usuario de Subversion 'user1' con la contraseña '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); 
  • Este código C # creará un nuevo repository '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); 
  • Este código C # proporcionará SID S-1-5-32-545 ('BUILTIN \ Users') con acceso de Lectura / Escritura al repository 'Test'. FYI: Los valores de AccessLevel son los que se describen en el MOF: "0 – sin acceso, 1 – solo lectura, 2 – lectura / escritura" .

     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); 

Actualizado el 10/02/2013:

El esquema WMI ha sido cambiado (¡y mejorado!) En VisualSVN Server 2.6. En resumen, para establecer los permissions de acceso en una ruta de repository, debe:

  • crear el object de la class VisualSVN_Repository especificando el nombre del repository,
  • crear el object de input VisualSVN_PermissionEntry que especifica el nombre de usuario de la count y los permissions de acceso,
  • invocar el método SetSecurity en VisualSVN_Repository pasando ruta de repository válida y object 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);