2012-06-19 12 views
6

Estoy haciendo un montón de conversiones de repositorios CVS y RCS en Subversion. De vez en cuando me encuentro con un archivo v dañado. He descubierto cómo repararlos manualmente, pero se está volviendo tedioso, y mi último proyecto tiene numerosos archivos dañados, más de lo que me gustaría reparar manualmente.¿Hay alguna herramienta para reparar archivos RCS/CVS, v?

Entonces me gustaría tener una herramienta para analizar los archivos RCS y repararlos. Eso bien puede significar que algunas versiones antiguas estarán incompletas. Por ejemplo, he visto casos en los que faltaba la versión 1.1, por lo que el truco es agregar una revisión vacía con un comentario que indique que falta.

He hecho muchas búsquedas tratando de encontrar una herramienta de este tipo, pero no he encontrado nada. Estaba a punto de comenzar a escribir mi propia herramienta, pero pensé que debería intentar preguntar aquí, primero.

sé que sólo podía obtener instantáneas de código e importar aquellos, y voy a recurrir a eso si tengo que (sólo para atajar esas sugerencias :)

++ gracias

+0

¿Cuál es la naturaleza de los daños y cómo han comenzado la restauración se ? –

+0

Hay una variedad de tipos de daños. Lo peor que estoy enfrentando ahora es que partes de los archivos v se reemplazan por nulos (supongo que un disco está lleno o que tuvieron un error de disco en algún momento del pasado distante). Todo lo que puedo hacer es reemplazar las revisiones dañadas (que siempre son versiones muy antiguas) con revisiones vacías que indican que están dañadas. No es peor que lo que tienen ahora. – trent

Respuesta

2

Personalmente No recomendamos la migración manual ya que el proceso lleva mucho tiempo y no hay forma de salir de él con un conjunto completo de datos/metadatos en el repositorio resultante.

Hay una herramienta para migrar CVS a SVN y se llama cvs2svn. Es "una herramienta para migrar un repositorio de CVS a Subversion, git o Bazaar". Puede consultar this how-to para obtener un consejo de inicio rápido.

Comprobar this a cabo:

CVS era sólo un front-end a RCS, y los archivos * .v son realmente RCS archivos. Solo échales un vistazo. por ejemplo, si usted tiene foo, v sólo hay que ejecutar:

co foo 

y va a la comprobación de la foo, archivo v.

También hay un RCS to SVN converter y usted puede intentar eso también.

+0

Sí, estoy usando cvs2svn. La conversión no es el problema, el problema es que ahoga los archivos corruptos v. Solucionarlos manualmente es un proceso tedioso y algo propenso a errores y parece que debería ser automatizado de alguna manera. – trent

+0

He actualizado mi respuesta, pruébelo. :) –

+0

RCS comandos bomba en estos archivos también. Algunos de ellos están dañados de tal manera que falla el rlog, pero el resto falla cuando trato de verificar las revisiones donde se encuentra el daño. Escribí un script para ejecutar todos los archivos .v que ejecutan rlog y luego co en cada revisión, que es como sé que el daño está muy extendido. – trent

0

Escribí una biblioteca de Python, editrcs, que analiza los archivos RCS en un árbol que puede modificarse y luego escribirse como un nuevo archivo RCS. No está diseñado para hacer frente a archivos RCS inválidos, pero podría ser un punto de partida razonable si la corrupción está solo en las secciones de datos o si modifica la biblioteca para evitar cualquier metadato corrupto.

también relevante a su pregunta en particular:

  1. ficheros RCS store la última revisión del tronco y las diferenciaciones ir hacia atrás en el tronco. Entonces, si la diferencia para una revisión histórica es irremediablemente corrupta, cualquier cosa anterior puede ser inutilizable, o al menos incorrecta, a menos que pueda adivinar cuál fue el cambio o no entre en conflicto. (Las ramas se almacena como hacia adelante diff de su branchpoint, ramas por lo que todo desde el punto de la corrupción podría ser problemático.)

  2. Se puede ser válido para tener un hueco en la numeración de revisión, si una revisión se sido removed del archivo RCS utilizando "rcs -o".Un grupo de valores nulos Si tienes un montón de valores nulos en la revisión debería ser, entonces esto es Por ejemplo:

    # Setup 
    echo 1 > test 
    echo "initial commit" | ci -l test 
    echo 2 >> test 
    echo "2" | ci -l test 
    echo 3 >> test 
    echo "3" | ci -l test 
    
    # RCS file contains revisions 1.1, 1.2, 1.3 
    rlog test 
    
    # Remove revision 1.2 
    rcs -o1.2 test 
    
    # RCS file now contains revisions 1.1, 1.3 
    rlog test 
    
Cuestiones relacionadas