Error «svn export failed» en WebSVN al hacer un tarball

Pero que complicado es esto… y desesperante. Lograr tener todo perfecto y sin ni una mancha 😛

Logo de WebSVNHoy vamos a luchar contra un «bug» (no se si se puede decir que sea culpa del script) de WebSVN en su rama 2.3.x. Si no conoces este software/script/web, es una pequeña página web que usa PHP, que permite acceder a un servidor Subversion desde una página web muy amigable. Este programa tiene la característica de hacer un zip/tar con el código fuente y bajarlo desde esta web… salvo si pones acentos en algún fichero. Entonces tendremos un bonito error que pondrá algo como:

svn export failed [...]

En ese momento piensas: «Seguro que es una chorrada de configuración de la web». Mal, compañero, mal. Siguiendo una lógica deductiva busque si era un error de WebSVN, luego de Subversion, luego de Apache, luego de PHP y luego del sistema operativo. Obviamente, y como ocurre en estos casos, era un error en conjunto.

La causa, básicamente, es que Apache siempre arranca con las «locale» asignas a «C», y obviamente, WebSVN lanza Subversion con dichas «locale» lo que hace que no sepa interpretar los caracteres acentuados y eñes (que están en UTF-8).

¿Como arreglarlo?, así de fácil o de complicado (como quieras verlo):

// Fichero websvn/include/setup.php
//
// Busca la línea 329 mas o menos, donde habrá algo del tipo:
setlocale(LC_ALL, '');
// Cambialo a:
setlocale(LC_ALL, 'es_ES.UTF-8');
// Añade esta línea
putenv('LC_ALL=es_ES.UTF-8');

Si no codificación de caracteres no es la misma, pues pon la que tenga tu equipo (ejecuta un «locale» en la consola).

Hecho.

Referencias:

Please follow and like us:

Unir Subversion con MantisBt, sin complicaciones.

Cuando trabajamos de manera «seria» en proyectos de desarrollo software, hay una parte muy importante que es utilizar una buena herramienta de control de versiones, y un buen gestor de incidencias o bugs.

Personalmente, llevamos bastante trabajando con Subversion en mi empresa sin grandes quejas, lo cual nos permite mantener los desarrollas saneados y controlados… aparte de saber quien metió la pata en un programa, ya que sabemos quien modifica cada línea del programa.

Hace unos meses, nos dimos cuenta que necesitábamos un control de las incidencias que encontrabamos, y incluimos en nuestros sistemas MantisBt que sustituyó a las clásicas hojas escritas con todos los problemas encontrados :P. Todo un clásico para todo desarrollo informático.

Ahora bien, nuestro sistema de trabajo era muy simple, desarrollar, probar y luego subir a Subversion, y revisar más tarde Mantis para cerrar las incidencias resueltas.

Pero no paramos en este protocolo para el control de nuestros desarrollos y quisimos integrar ambos sistemas, con el siguiente objetivo: cuando subamos una revisión a Subversión, automáticamente se cerraran las incidencias asociadas, que indicaremos en el comentario de la revisión.
Tras investigar un poco por la red, encontramos una forma muy limpia, sin tener que programar, gracias a que ya habían desarrollado un plugin para integrar los dos servicios de manera bastante sencilla.

  1. Al menos tener la versión 1.2.x de Mantis (en nuestro caso la 1.2.3), y Subversion, cualquier versión por encima de 1.3.x, (en nuestro caso la 1.6.6). Tener acceso a un usuario con acceso a los repositorios y ser administrador en Mantis.
  2. Ir a la web del creador del plugin (por si tienes curiosidad, aquí tienes el Mantis del plugin), y bajarte los plugins que indica de este repositorio git. Son solo dos: «meta» y «source-integration«. Desde allí mismo nos permite bajar un snapshot en tar.gz.
  3. Descomprimimos y vemos que el plugin «source-integration» tiene una carpeta «Source» y luego otras carpetas para cada unos de los servidores de control de versiones soportados (Git y SVN). En el caso del SVN, podemos usar directamente el protocolo SVN o a través de WebSVN (en mi caso, use directamente el protocolo SVN), copiando sólo la carpeta «Source» y «SourceSVN«.
  4. Lista de Plugins

    Lista de Plugins en Mantis 1.2.3

    Una vez tengamos copiados las carpetas (ojo es importante que sean las carpetas que contienen los ficheros php) en el directorio «plugins» del directorio donde se encuentra Mantis, ir al interfaz de «Administración > Administrar Plugins«, e instalarlos, respetando las dependencias que muestran.

  5. Ahora seguimos las indicaciones que se indican en esta web, que son mucho más detalladas que las de su creador. Sólo hay una discrepancia: Todo se configura a través del plugin «Source Control Integration«, solo rellenando el campo «SVN: Path to binary«, en mi caso con «/usr/bin» en una Ubuntu 10.04 server.
  6. Ahora si queremos adaptarlo al castellano, cambiamos «Bug Fixed Regex Pass 1», por algo parecido a:
    /(?:corregido?d?s?|arreglado?s?)+\s+(?:#(?:\d+)[,\.\s]*)+/i
    

    Así cada vez que escribamos esto («arreglados #001 #008») en un comentario de un commit de Subversión, cerraremos los bugs asociado en el mensaje.

  7. Se puede cambiar muchas más opciones, pero lo dejo a vuestra investigación. Nosotros no indagamos mucho más. Hay muchas más información en: aquí.
  8. Obtener la ruta de un repositoro

    Ahora aparecerá una nueva sección en los apartados principales de Mantis, llamado «Repositories». Al entrar, podremos añadir un repositorio que controlar, en nuestro caso, hemos seleccionado el protocolo «SVN», por lo que tiene que tener usar ruta el repositorio que empiece por «svn://», y que tendréis que conocer si tenéis el repositorio en nuestro equipo (en Windows sólo hay que seleccionar la carpeta que tiene el repositorio en nuestro ordenador, y en propiedades, en la pestaña de «TortoiseSVN», esta la ruta con el protocolo SVN). Recuerda que tienes que dar un usuario existe en Subversion, no en el sistema.

  9. Tras esto, pulsamos en «Import Latest Data«, y si no hay ningun error, tendremos un mensaje que nos indica hasta que revisión ha logrado importar. Si tienes muchas revisiones, puede dar un timeout, por lo que tendrás que volver a darle o aumentar el tiempo de timeout de servidor.

Ya está… Bueno, realmente no. Con esto esta conectado, pero cuando subamos un revisión a Subversion, veremos con desesperación que no se refleja en Mantis. ¿Porqué?. Bueno, en teoría, tendríamos que importar los datos cada vez desde el interfaz de Mantis. Esto, claramente, no es lo que buscamos, ya que queremos una experiencia «automática». Para remediarlo, podemos automatizar la adquisición de los datos de los repositorios mediante una tarea programada. En nuestro caso:

  1. Editar el fichero «/etc/crontab«:
    # Integracion subversion y mantis
    */5 *   * * *   svn     curl "http://localhost/mantis/plugin.php?page=Source/import&id=all" >> /tmp/updateMantisFromSVN 2>&1
    

    Yo, al principio y por depuración, incluyo la redirección a un fichero, tu puedes cambiarlo a «/dev/null» por ejemplo.
    También, se puede cambiar la frecuencia, en este caso está puesto cada 5 minutos, que quizás sea un poco exagerado, y se podría subir.

  2. Nos tiene que devolver algo parecido a esto:
    <pre>Requesting svn log for Repo 1 starting with revision 28...
    Processing svn log...
    No revisions parsed.
    </pre><pre>Requesting svn log for Repo 2 starting with revision 9...
    Processing svn log...
    No revisions parsed.
    

    Y ya tenemos todo el tinglado montado.

Please follow and like us: