Pregunta

Finalmente encontré una respuesta a mi pregunta cuando quise publicarlo!Sin embargo, voy a seguir publicando, incluyendo mi respuesta, por si ayuda a alguien:

Cuando la conversión de CVS a Subversion cvs2svn error en algunos archivos con el mensaje

"xxx is not a valid ,v file"

¿Cuál es el problema?

¿Fue útil?

Solución

Como resulta 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);
      }
    }
  }
}

Otros consejos

En mi caso hubo corrupción en la sección symbols del archivo xxx,v. El formato esperado es tag_name:tag_rev, pero no hubo casos de:

  • Falta :tag_rev
    por ejemplo, tag_name
    Fijo mediante la supresión de la línea.
  • múltiple tag_name
    por ejemplo tag_name1:tag_name2:tag_rev
    Fijo quitando el segundo nombre de la etiqueta (que uno se quita probablemente depende de lo que son).
  • no válida delimitador de nombre / revisión. En mi caso, el carácter no válido siempre se z (sólo hay diferencia de 1 bit entre : ASCII y z).
    por ejemplo, tag_nameztag_rev
    Fijo reemplazando el z con :.

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

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 para imprimir sólo si ocurre una excepción, pero esto era lo suficientemente bueno para mis necesidades.


También encontré este enlace que resultó no ser mi problema, pero puede ayudar a alguien más. Crédito a Christian Haarmann para la documentación de la misma.

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 de pensar el archivo era corrupto.

También he dicho error. Cuando uso cvs2git con el fin de migrar un repositorio CVS a Git, este error se produce durante varios archivos. He detectado que hay una falta de 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 RCS-file: rcs_man_page

Una forma de solucionar esto es ejecutar rcs log *file,v*, que puede proporcionar un poco de información.

En mi caso, he tenido algunos archivos que faltan @s, algunos de los archivos que falta un punto y coma, y la herramienta que se utiliza para importar mi edad repositorio en el cvspserver había tirado en un sin referencia versión.

Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top