Inicio > java, kodegeek, opensource, programación > Migrando KodeGeek de CVS a Subversion en SF.net

Migrando KodeGeek de CVS a Subversion en SF.net

Viernes, 25 de Diciembre de 2009

Bueno, creo que ya era hora de hacerlo. Así que lo hice en varios pasos, siguiendo las recomendaciones de SF.net:

  • Hacer un respaldo del código existente en CVS:

    rsync -av rsync://elangelnegro.cvs.sourceforge.net/cvsroot/elangelnegro/* .

    Hasta ahora bien.
  • Crear un vaciado para SVN usando cvs2svn:
    Hmm, no tan rápido:

    auyan:sf josevnz$ ~/Downloads/cvs2svn-2.3.0/cvs2svn --dumpfile=svndump .
    ERROR: cvs2svn uses the anydbm package, which depends on lower level dbm
    libraries. Your system has dbm, with which cvs2svn is known to have
    problems. To use cvs2svn, you must install a Python dbm library other than
    dumbdbm or dbm. See http://python.org/doc/current/lib/module-anydbm.html
    for more information.
    auyan:sf josevnz$

    OK, vamos a ver que tan difícil es de hacer en OSX. Lo primero que hice fué actualizar Python (2.5 -> 3.1.1) usando un paquete pre-compilado:

    auyan:sf josevnz$ /Library/Frameworks/Python.framework/Versions/3.1/bin/python3
    Python 3.1.1 (r311:74543, Aug 24 2009, 18:44:04)
    [GCC 4.0.1 (Apple Inc. build 5493)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.

    El script cvs2svn fué escrito en Python 2.5, no 3. Así que lo convertimos con un poco de ayuda:

    auyan:sf josevnz$ /Library/Frameworks/Python.framework/Versions/3.1/bin/2to3 -w ~/Desktop/cvs2svn-2.3.0/cvs2svn
    RefactoringTool: Skipping implicit fixer: buffer
    RefactoringTool: Skipping implicit fixer: idioms
    RefactoringTool: Skipping implicit fixer: set_literal
    RefactoringTool: Skipping implicit fixer: ws_comma
    RefactoringTool: Refactored /Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn
    --- /Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn (original)
    +++ /Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn (refactored)
    @@ -69,7 +69,7 @@

    try:
    svn_main(os.path.basename(sys.argv[0]), sys.argv[1:])
    -except FatalException, e:
    +except FatalException as e:
    sys.stderr.write(str(e) + '\n')
    sys.exit(1)

    RefactoringTool: Files that were modified:
    RefactoringTool: /Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn

    Más las librerías de cvs2svn:

    auyan:sf josevnz$ for file in `ls ~/Desktop/cvs2svn-2.3.0/cvs2svn_lib/*.py`; do /Library/Frameworks/Python.framework/Versions/3.1/bin/2to3 -w $file; done
    # Montón de paja omitida por brevedad :)

    Además de unos pequeños cambios en el código (las líneas que requieren edición tienen número por delante):


    1 #!/Library/Frameworks/Python.framework/Versions/3.1/bin/python3
    2 ##!/usr/bin/env python
    3 # (Be in -*- python -*- mode.)
    55 #if not ((2,4) < = version < (3,0)):
    56 # sys.stderr.write(
    57 # version_error + ' version %d.%d.%d.\n'
    58 # % (version[0], version[1], version[2],)
    59 # )
    60 # sys.stderr.write(version_advice)
    61 # sys.exit(1)

    Sin embargo el Python 3 es anal acerca de la mezcla de espacios y tabulación:

    ...
    TabError: inconsistent use of tabs and spaces in indentation

    Traté de arreglarlo rápidamente, pero lo que hice fué empeorar la situación:

    auyan:sf josevnz$ perl -p -i -e 's#\t# #g' /Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn_lib/*.py
    auyan:sf josevnz$ ~/Desktop/cvs2svn-2.3.0/cvs2svn --dumpfile=svndump .
    Traceback (most recent call last):
    File "/Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn", line 68, in <module>
    from cvs2svn_lib.main import svn_main
    File "/Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn_lib/main.py", line 30, in <module>
    from cvs2svn_lib.svn_run_options import SVNRunOptions
    File "/Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn_lib/svn_run_options.py", line 40, in <module>
    from cvs2svn_lib.svn_output_option import DumpfileOutputOption
    File "/Users/josevnz/Desktop/cvs2svn-2.3.0/cvs2svn_lib/svn_output_option.py", line 83
    cvsauthor = to_utf8(cvsauthor)
    ^
    IndentationError: unindent does not match any outer indentation level

    No me jodan. Demasiado tratar de que este script funcione con Python 3, ¿será más fácil instalar las librerías faltantes y que Python 2.5 las reconozca?

    Me decidí entonces de usar las librerías compatibles con DBM. Nos las bajamos de Oracle y compilamos:


    auyan:db-4.8.26 josevnz$ pwd
    /Users/josevnz/Desktop/db-4.8.26
    auyan:db-4.8.26 josevnz$ ./dist/configure && make
    auyan:db-4.8.26 josevnz$ cd build_unix/
    auyan:build_unix josevnz$ ../dist/configure && make && make install && export DYLD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.8/lib:$DYLD_LIBRARY_PATH

    Instalé entonces capa de Python que enlaza con DBM, bsddb3 4.8.1:

    auyan:bsddb3-4.8.1 josevnz$ pwd
    /Users/josevnz/Downloads/bsddb3-4.8.1
    auyan:bsddb3-4.8.1 josevnz$ python setup.py build

    Y como todo salió bien:

    sudo python setup.py install

    Pero ¿funcionará ahora?:


    auyan:sf josevnz$ ~/Downloads/cvs2svn-2.3.0/cvs2svn --dumpfile=svndump .
    # Omitiendo salida del comando....
    cvs2svn Statistics:
    ------------------
    Total CVS Files: 362
    Total CVS Revisions: 603
    Total CVS Branches: 0
    Total CVS Tags: 0
    Total Unique Tags: 0
    Total Unique Branches: 0
    CVS Repos Size in KB: 7377
    Total SVN Commits: 228
    First Revision Date: Thu Jan 13 16:10:27 2005
    Last Revision Date: Sat Jul 18 23:49:03 2009
    ------------------
    Timings (seconds):
    ------------------
    2.132 pass1 CollectRevsPass
    0.063 pass2 CleanMetadataPass
    0.009 pass3 CollateSymbolsPass
    0.163 pass4 FilterSymbolsPass
    0.017 pass5 SortRevisionSummaryPass
    0.031 pass6 SortSymbolSummaryPass
    0.089 pass7 InitializeChangesetsPass
    0.095 pass8 BreakRevisionChangesetCyclesPass
    0.092 pass9 RevisionTopologicalSortPass
    0.031 pass10 BreakSymbolChangesetCyclesPass
    0.080 pass11 BreakAllChangesetCyclesPass
    0.062 pass12 TopologicalSortPass
    0.169 pass13 CreateRevsPass
    0.016 pass14 SortSymbolsPass
    0.009 pass15 IndexSymbolsPass
    1.075 pass16 OutputPass
    4.134 total

    ¡Exito! :D

  • Importar el código de nuevo en SVN:

    Ahora no queda otra más que tratar de importar el archivo que fué creado en el paso anterior:

    auyan:sf josevnz$ ls -l svndump
    -rw-r--r-- 1 josevnz josevnz 8600150 Dec 25 20:53 svndump
    gzip svndump

    SF.net tiene una consola especial para estos casos. En este caso cree mi nueva sesión y me dispuse a trabajar:

    auyan:~ josevnz$ ssh -t josevnz,elangelnegro@shell.sourceforge.net create
    The authenticity of host 'shell.sourceforge.net (216.34.181.119)' can't be established.
    RSA key fingerprint is b4:c5:6c:36:f7:ad:2c:23:52:e1:84:3e:77:61:5d:59.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'shell.sourceforge.net,216.34.181.119' (RSA) to the list of known hosts.
    josevnz,elangelnegro@shell.sourceforge.net's password:

    Requesting a new shell for "josevnz" and waiting for it to start.
    queued... creating... starting...
    This is an interactive shell created for user josevnz,elangelnegro.
    Use the "timeleft" command to see how much time remains before shutdown.
    Use the "shutdown" command to destroy the shell before the time limit.
    For path information and login help, type "sf-help".

    [josevnz@shell-23008 ~]$
    [josevnz@shell-23008 ~]$ timeleft
    Time remaining before shutdown: 239 minutes.

    Subiendo el código:

    auyan:sf josevnz$ rsync -aiv svndump.gz josevnz,elangelnegro@web.sourceforge.net:htdocs
    josevnz,elangelnegro@web.sourceforge.net's password:
    building file list ... done

    sent 6067785 bytes received 42 bytes 49132.20 bytes/sec
    total size is 6066914 speedup is 1.00

    Y finalmente el proceso de importación en varios pasos:

    [josevnz@shell-23008 ~]$ adminrepo --checkout svn
    Lock and checkout the svn repository for elangelnegro? [ny] y
    Repository locked -- starting checkout copy.
    ...

    [josevnz@shell-23008 ~]$ ls -l /home/groups/e/el/elangelnegro/htdocs/svndump.gz
    -rw-rw-r-- 1 josevnz elangelnegro 6066914 Dec 26 01:53 /home/groups/e/el/elangelnegro/htdocs/svndump.gz
    [josevnz@shell-23008 ~]$ gunzip /home/groups/e/el/elangelnegro/htdocs/svndump.gz
    [josevnz@shell-23008 ~]$ svnadmin load /svnroot/elangelnegro < /home/groups/e/el/elangelnegro/htdocs/svndump
    ....
    ------- Committed revision 227 >>>

    < << Started new transaction, based on original revision 228
    * editing path : trunk/src/java/main/com/kodegeek/blog/twitter/TwitterPing.java ... done.
    [josevnz@shell-23008 ~]$ adminrepo --save svn

  • Desactivar el soporte de CVS para el proyecto

    Primero verifiqué que podía acceder el nuevo repositorio:

    svn co https://elangelnegro.svn.sourceforge.net/svnroot/elangelnegro elangelnegro

    Y después de eso desactive el acceso a CVS.

Así que de ahora en adelante el código está disponible usando SVN en la siguiente ubicación:

  • svn co https://elangelnegro.svn.sourceforge.net/svnroot/elangelnegro elangelnegro

¡Que lo disfruten!

java, kodegeek, opensource, programación

  1. Sin comentarios aún.
  1. Viernes, 25 de Diciembre de 2009 a las 20:26 | #1