2009-04-21 11 views
5

¡Finalmente encontré una respuesta a mi pregunta cuando quería publicarla! Sin embargo yo todavía posteo, incluyendo mi respuesta, en caso de que ayuda a otra persona:cvs2svn falla con "xxx no es un archivo válido, v"

Al convertir de CVS a Subversion cvs2svn fallaron en algunos archivos con el mensaje

"xxx is not a valid ,v file" 

Cuál es el problema?

Respuesta

3

Como resultado, CVSNT omite el último 0xa de algunos archivos donde cvs2svn los necesita. Esto se puede solucionar fácilmente con el siguiente código C#:

static void Main(string[] args) 
{ 
    foreach (string file in Directory.GetFiles(args[0], "*,v", SearchOption.AllDirectories)) 
    { 
    using (FileStream sin=File.Open(file, FileMode.Open, FileAccess.ReadWrite)) 
    { 
     sin.Position=sin.Length-1; 
     if (sin.ReadByte()==0x40) 
     { 
     Console.WriteLine("fixed "+file); 
     sin.WriteByte(0xa); 
     } 
    } 
    } 
} 
0

También tengo un error. Cuando uso cvs2git para migrar un repositorio cvs a git, este error ocurre para varios archivos. He detectado que falta un cierre 0x40 (@) al final del archivo.

Así que mi solución es:

1. Open the corrupted cvs-history-file e.g. with vim (maybe in binary mode) 
2. Add the missing @ 

Si esto no soluciona el problema, a continuación, comparar el contenido del archivo dañado con el formato de archivo de RCS-: rcs_man_page

0

Una forma de solucionar este es ejecutar rcs log *file,v*, lo que puede proporcionarle alguna información.

En mi caso, me faltaron algunos archivos de @, algunos archivos faltaban un punto y coma, y ​​la herramienta que utilicé para importar mi antiguo repositorio en el cvspserver había sido arrojada en una versión sin referencia.

¡Buena suerte!

1

En mi caso, hubo daños en la sección symbols del archivo xxx,v. El formato esperado es tag_name:tag_rev, pero había casos de:

  • Missing :tag_rev
    por ejemplo tag_name
    Solucionado al eliminar la línea.
  • Múltiple tag_name
    p. Ej. tag_name1:tag_name2:tag_rev
    Solucionado al eliminar el segundo nombre de etiqueta (el que elimine probablemente dependa de lo que sea).
  • Nombre inválido/delimitador de revisión. En mi caso, el carácter no válido siempre fue z (solo hay una diferencia de 1 bit entre ASCII : y z).
    p. Ej. tag_nameztag_rev
    Se corrigió reemplazando el z con :.

Para ayudar durante mi investigación agregué una línea print a cvs2svn_rcsparse\common.py. Si el análisis de los símbolos falla, la causa es la última etiqueta impresa.

def _parse_admin_symbols(self, token): 
while 1: 
    tag_name = self.ts.get() 
    # WileCau print the token and tag_name 
    print 'token=|%s| tag_name=|%s|' % (token, tag_name) 
    if tag_name == ';': 
    break 
    self.ts.match(':') 
    tag_rev = self.ts.get() 
    self.sink.define_tag(tag_name, tag_rev) 

La impresión adicional añade un buen montón de ruido a la salida de lo que podría ser más agradable sólo para imprimir si ocurre una excepción, pero esto era lo suficientemente bueno para mis necesidades.


También encontré este enlace, que no fue mi problema, pero puede ayudar a alguien más. Gracias a Christian Haarmann por documentarlo.

http://tigris-scm.10930.n7.nabble.com/suggestions-for-cvs2svn-fix-for-error-quot-myfile-txt-v-is-not-a-valid-v-file-quot-td54240.html

En caso de que el enlace no es válida, el resumen es que alguien había editado el archivo xxx,v y su editor había reemplazado 0x0A (LF) con 0x0D/0x0A (CR/LF), y el carácter adicional causado el analizador para pensar que el archivo estaba corrupto.

Cuestiones relacionadas