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.