jueves, 1 de noviembre de 2012

Script Bash para sincronizar cambios entre repositorios SVN

Creo que es algo bastente común, cuando se está trabajando con distintas versiones del mismo producto, tener que sincronizar cambios de una versión a otra.

En particular en Artech tenemos el código en un repositorio SVN, y en este momento tengo cuatro versiones del cliente de iOS en las que estoy trabajando:
  • la versión prácticamente cerrada del Upgrade 2 de la Evolution 2
  • la rama de upgrades (Upgrade 3 y posteriores) de la Evolution 2
  • la versión oficial de Tilo (nombre código de la próxima versión de GeneXus)
  •  una versión inestable de Tilo donde estoy haciendo cambios que no quiero hacer commit porque están "atados con alambre"
Llevar los cambios de una versión a otra puede ser bastante complicado, si se trata de un fuente que tiene cambios en más de una versión. Es un proceso bastante manual.

Para facilitar este proceso hice un script Bash que se fija los cambios en la versión de origen y muestra el comparador (File Merge, viene con Xcode) para los archivos modificados, o copia directamente los archivos que son nuevos.

Estoy en fase de beta-test... para las primeras comparaciones que hice me funcionó.

Si a alguien le sirve, quedó disponible en GitHub. Lo único que hay que cambiar es la función pathForName, el mapeo entre los nombres de las versiones y los directorios.

Aclaro que no soy experto en Bash ni mucho menos, así que seguramente haya muchas mejoras para hacerle. Cualquier aporte es bienvenido.

Por último, repetir que no está muy probado, así que quien lo quiera usar, hágalo bajo su propio riesgo. El soporte que le de dependerá del tiempo que pueda dedicarle. En principio, los cambios que le haga van a ser para poder usarlo yo de forma razonable en el día a día.

8 comentarios:

  1. Es mucha cosa? No te conviene usar algo como "beyond compare"?

    ResponderEliminar
    Respuestas
    1. No es mucha cosa, en general son unos pocos archivos, ponele 10 en promedio, en un proyecto que tiene varios cientos. Además pueden haber varios commits al día que hay que sincronizar.

      Como dice Fabián, el objetivo era poder llamar al comparador de forma automática, pero solo para los archivos que importan.

      Eliminar
    2. "Beyond compare" es fantástico, te muestra solo las diferencias y luego podes hacer doble clic en los archivos y comparas el contenido y copias solo lo que querés. ¿Lo has visto?

      Eliminar
    3. Sí, lo uso en Windows, pero esto era para la Mac que no hay un Beyond Compare... Por eso File Merge

      Eliminar
  2. Esta faltando el stats "D" para cuando se borró un archivo, con: ask "Delete $f? " "rm ${DEST}${f}"

    Acosta, usa "algo como beyond compare" (FileMerge), lo productivo del script es que busca automáticamente sobre cuales archivos hacer la comparación.

    ResponderEliminar
    Respuestas
    1. Si, lo dejé afuera a propósito, hasta tenerle más confianza al script :) Pero lo agrego en el Gist para que quede. Gracias.

      Eliminar
    2. O algo como "Allway Sync" :)

      Algo inventado tiene que existir!! (PD. ya se que no es divertido pero te puede ahorrar tiempo)

      Eliminar
    3. No, porque no quiero mantener las carpetas sincronizadas... Quiero llevar algunos cambios de una versión a otra, pero son cosas que tienen diferencias.

      Algo inventado tiene que existir, estamos de acuerdo, pero lo que precisaba no era mucho, y así lo puedo adaptar exactamente a lo que necesito

      Eliminar