tortoise subversion puerto para net configuracion cliente windows batch-file svn svnsync file-uri

subversion - Cómo convertir la ruta de Windows a archivo: URL, en un archivo de proceso por lotes, adecuado para el uso de línea de comando SVN



tortoise svn net (1)

En una instalación SVN basada en Windows (usando CollabNet Subversion Edge), tengo un archivo por lotes de gancho post-commit donde construyo un nombre de carpeta de repositorio, y necesito llamar a svnsync con un file: URL apuntando a esa carpeta de Windows.

La pregunta ahora es: ¿cómo puedo convertir una carpeta de Windows o un nombre de archivo a un file: URL, de tal manera que esa URL sea al menos aceptable para las herramientas de línea de comandos de SVN?


En un archivo por lotes, si la variable FILE_OR_FOLDER_NAME contiene el archivo de Windows (absoluto o relativo, local o UNC, con o sin espacios, existente o no existente) o el nombre del directorio, los siguientes comandos colocan el file: correspondiente file: URL en la variable FILE_URL :

for /f "delims=" %%R in ("%FILE_OR_FOLDER_NAME%") do set FILE_URL=%%~fR% set FILE_URL=file:///%FILE_URL% set FILE_URL=%FILE_URL://///=//% set FILE_URL=%FILE_URL:/=/%

La línea 1 amplía el nombre de archivo relativo a uno absoluto; la línea 2 es file:/// ; la línea 3 maneja el caso especial de una ruta UNC; y la línea 4 asegura que solo use barras diagonales.

Tomados en conjunto, estos transforman //remotehost/share/folder en file://remotehost/share/folder , d:/folder en file:///d:/folder .

En lo que respecta a mis pruebas, los comandos anteriores siempre dan como resultado un file: URL que es aceptable para una línea de comando SVN, y probablemente también para otros usos.

Lo único que no es realmente correcto es que los espacios y otros caracteres especiales como # no están correctamente codificados en URL en el file: resultante file: URL: D:/my test#repo convierte en file:///D:/my test#repo , que técnicamente no es correcto. Sin embargo, en mi caso de uso específico, esto no plantea ningún problema, ya que el analizador de líneas de comandos de SVN encuentra el repositorio independientemente.