Migrando KodeGeek de CVS a Subversion en SF.net
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!
- 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!




Comentarios recientes