Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 17 de enero de 2013
De 1996 a 2004 fui el programador principal de IRC-Hispano. Al principio simplemente editaba el código fuente confiando en los backups y en hacer copias explícitas de vez en cuando (cuando iba a tocar algo "gordo"). Luego empecé a usar CVS. Más tarde migré ese repositorio CVS a Subversion.
Aunque dejé el desarrollo IRC en 2004 (pasé a Jabber/XMPP), siempre he querido publicar el código que desarrollé. El problema es que mucho código pertenecía a IRC Hispano (desarrollo pagado), y otro a Argo. A finales de 2012 conseguí el permiso de todo el mundo para publicar ese código "antiguo", porque hace años que no está en producción y ya no tiene valor comercial.
Pero creo que sí tiene valor técnico, y que merece ser preservado y puesto a disposición pública.
El primer código publicado fue el código fuente del servidor IRC (esto se ha ido publicando siempre durante 1996-2004, porque era el servidor utilizado en la red IRC-Hispano), y el código fuente de una variante particular de Argo, el IRC-OoB, para comercializar su tecnología de "IRC sobre Túneles IP".
Publicar este código fue complicado por varios motivos:
En un sistema de control de versiones moderno, como Mercurial, existiría una rama OoB permanente y única, y se iría haciendo "merge" desde la rama principal cuando fuese necesario, conservando una historia lineal y bastante simple.
Mercurial tiene una herramienta de migración capaz de importar repositorios en un buen número de formatos, incluyendo subversion. En el proceso se pueden hacer muchos ajustes y adaptaciones. Es una tarea poco documentada, así que me parece interesante publicar aquí los detalles de la migración.
La migración consta de tres scripts.
El primer script es complicado, y me costó un par de días de esfuerzo:
echo "jcea=Jesus Cea <jcea@jcea.es>" > authors.txt echo "root=Jesus Cea <jcea@jcea.es>" >> authors.txt rm -r ircd-hg/* ircd-hg/.* hg convert --datesort --authors authors.txt ircd-svn ircd-hg ( cd ircd-hg hg branches | grep "^u2.*-OoB " | cut -d" " -f1 | sed 's/\(.*\)/\1 OoB/g' ) > branchmap.txt ( cd ircd-hg >../tags.txt previo=`hg log -r "max(branch('OoB'))" --template "{node}"` for i in `hg branches | grep "^u2.*-OoB " | cut -d" " -f1 | tac` do cabeza=`hg log -r "min(branch('$i'))" --template "{node}"` cola=`hg log -r "max(branch('$i'))" --template "{node}"` padre=`hg log -r "p1('$cabeza')" --template "{node}"` origen=`grep $cabeza .hg/shamap |cut -d" " -f1` p1=`grep $previo .hg/shamap |cut -d" " -f1` p2=`grep $padre .hg/shamap |cut -d" " -f1` echo $origen $p1,$p2 previo=$cola echo $cola $i >>../tags.txt done ) > splicemap.txt echo svn:db5442c5-c7e5-0310-8be0-98c3e449b2ea/branches/u2_10_H_08_11-OoB@5 \ svn:db5442c5-c7e5-0310-8be0-98c3e449b2ea/branches/u2_10_H_08_02-OoB@179 >>splicemap.txt rm -r ircd-hg/* ircd-hg/.* hg convert --datesort --authors authors.txt \ --branchmap branchmap.txt \ --splicemap splicemap.txt ircd-svn ircd-hg ( cd ircd-hg hg up -r OoB cat >.hgtags <<EOF 1895195c18956e4a0e6aa1373bafd05041a14cb7 u2_10_H_02_50 193341efc64e8c83277127d5ef400a2567311f18 u2_10_H_04_49 32ecba8435e7b7a45951887e29913b08b385e144 u2_10_H_04_49-OoB 04ab0446ef2f6cd0b0df86a7dec31a2bd8f5d539 u2_10_H_04_77 75e8c877d25c6263b135583b97015bde13995bfc u2_10_H_04_77-OoB 1cb73c1e386ac5c6028858f230e7b64f4c0a77c9 u2_10_H_04_78 2dc8d602ddcc5c1115985eee53be56257404b049 u2_10_H_04_76 da705213e1ab283eae95de553be078a2176b5d6f u2_10_H_04_76-OoB 3c5569acc0f35eab99ec91f45a38d8dc7354c726 u2_10_H_05_68 929b7f7d55cb59b39327c166c037dc7cd5d80d84 u2_10_H_05_68-OoB 61357553b1c85f14d785740a759793bcdf9a0d76 u2_10_H_04_00 496f026b5e1b7f222f25bc2e1b804b243330397f u2_10_H_04_01-OoB 52d11a2113cc1ea18c091dfac180032a662580a2 u2_10_H_07_01 f0034e1e977a9a6ec68d93551933bdc3f5ed66e9 u2_10_H_07_01-OoB 281db3077047902faa040fa9d19458efc6b29d8a u2_10_H_06_01 95e2eb38aa642109e1ad9415c8294178cd1f3b22 u2_10_H_06_01-OoB a115162858afb85aa284bfa15268e6dcc98338ce u2_10_H_06_28 a6d437beccd48b2d71c07a0cc0a60724d1b41ceb u2_10_H_04_20 4516fb6cf46e0f8bd66721171bbb31b603919a49 u2_10_H_04_20-OoB c6ea93c65562a9a8b0a00d0d3efae904f10e2c45 u2_10_H_05_69 2dc7a15458e5a9a8252b1e05c9ab36b08c52fb71 u2_10_H_05_69-OoB db8c971997fdb536d82ec95ffc7459f0c88206b4 u2_10_H_04_79 896ff83568e458ae1c4c762d60df8a8b7f42aa2e u2_10_H_04_79-OoB 043ea4c036701bede90d183a9eb9a9ffc084d2c9 u2_10_H_09_13 c175c599a3b879011ba552e033d593c2b81bdd2a u2_10_H_09_13-OoB 67d0478154e0e33a2c61cba27f50d20f23a78d6f u2_10_H_07_10 baddd836fbaecff708e07055d9a9550c55085a72 u2_10_H_07_10-OoB ec8c0260371d51d7b7036e9832858355d8ca594a u2_10_H_03_38 cf4fa7d2f1a3e4d88092ee7be6f8dc20c8477bf4 u2_10_H_03_38-OoB dd26404b3c37a9614c822baa65986865b20ba7a0 u2_10_H_08_01 0fd66ce6b40d61e2bec2d473f270d22e5d9af2df u2_10_H_08_01-OoB eafbcc80e35c09ab78a45c0b71d3f7e18e744992 u2_10_H_08_02 74dfd76c2c903cbca4c7fc668b14ad59c4c20563 u2_10_H_08_18 fb70cf649a808815f45997b4dd27cc2bb0327328 u2_10_H_08_18-OoB 4636ae62f9c6d45f544f1322c8fab79ebe5f0f3b u2_10_H_08_66 751e938d9cc10cec029483ff2049ca18162c4484 u2_10_H_08_66-OoB be5d090b8927a7270082a50c9e98fee420e6675e u2_10_H_09_04 8ed2e39d89b54c4b5e2a1913c5f4899938513b64 u2_10_H_09_04-OoB EOF hg add .hgtags hg comm -m "Configura tags" )
Este script realiza una primera migración de Subversion a Mercurial. De hecho se realizan dos migraciones. En la primera, se hace una migración directa, sin más. De esa migración se extrae información de ramas que quiero unificar, y se calculan los puntos de corte para convertir un repositorio muy ramificado con muchas ramas espurias (limitaciones de Subversion) a una única rama OoB. También se corrige un "merge" fantasma en el repositorio original, que no queremos.
Una vez obtenida toda esa información, y generados los ficheros de configuración correspondientes, se borra el repositorio migrado y se realiza una migración nueva desde Subversion, en esta ocasión realizando los ajustes calculados.
Por último, se añaden "tags" para identificar las diferentes versiones.
Los siguientes scripts son más sencillos:
\rm -r ircd-hg2/* ircd-hg2/.* hg clone -r OoB ircd-hg ircd-hg2 cd ircd-hg2 hg pull -r ircd
Este script simplemente toma el repositorio Mercurial generado con el script anterior y extrae dos ramas de él (el repositorio contiene código de otros proyectos): la rama "OoB" y la rama "ircd".
El tercer script nos da un repositorio limpito y listo para publicar:
echo "ircd default" >branchmap.txt cat >filemap.txt <<EOF exclude agenda.c exclude agenda_lista.c exclude agenda_sms.py exclude analiza_dump exclude berkeleydb.c exclude berkeleydb.h exclude berkeleydb2.h exclude cibercafes exclude claves_de_cifrado exclude comandos.c exclude comandos.h exclude config.h exclude db.c exclude db.h exclude dbuf.c exclude dbuf.h exclude ilines_lista.c exclude ipvirtual.c exclude m_db.c exclude m_db.h exclude malloc.c exclude malloc.h exclude max_clones exclude mod_bdd.h exclude mod_berkeleydb.c exclude mod_berkeleydb.h exclude mod_ipc.h exclude mod_notify.h exclude mod_notify_db.h exclude mod_privmsg.h exclude mod_servmsg.h exclude mod_tools.h exclude module.h exclude modulos exclude modulos.c exclude modulos.h exclude modulos_python.c exclude modulos_python.h exclude nicks_lista.c exclude olimpo.c exclude privmsg.c exclude privmsg.h exclude saluda.c exclude shared.c exclude shared.h exclude strlcat.c exclude strlcpy.3 exclude strlcpy.c exclude version.h exclude z0 exclude z1 exclude z2 exclude z3 exclude z4 exclude z42 exclude z5 exclude z52 exclude z6 exclude z7 exclude z7.plantilla_email EOF rm -r ircd-hg3/* ircd-hg3/.* hg convert --datesort --branchmap branchmap.txt \ --filemap filemap.txt ircd-hg2 ircd-hg3
Este script realiza una conversión de un repositorio Mercurial a otro, cambiando el nombre de la rama "ircd" a "default", siguiendo la convención habitual, y excluyendo numerosos ficheros ajenos al servidor IRCD, a pesar de haber limitado las ramas que hemos exportado (culpa mía, por mezclar cosas en el repositorio original. He aprendido mucho desde entonces :). Esos ficheros se corresponden al código fuente de Olimpo, y se publicarán de forma separada.
Los detalles de lo liberado.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS