Pergunta

Eu finalmente encontrei uma resposta para a minha pergunta, quando eu queria publicá-la! No entanto eu ainda vou postá-lo, incluindo a minha resposta, no caso de ajuda de outra pessoa:

Ao converter de CVS para Subversion cvs2svn falhou em alguns arquivos com a mensagem

"xxx is not a valid ,v file"

Qual é o problema?

Foi útil?

Solução

Como se vê omite CVSNT o último 0xA de alguns arquivos onde cvs2svn precisa deles. Isso pode ser facilmente corrigido com o seguinte 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);
      }
    }
  }
}

Outras dicas

No meu caso houve corrupção na seção symbols do arquivo xxx,v. O formato esperado é tag_name:tag_rev, mas houve casos de:

  • Faltando :tag_rev
    por exemplo tag_name
    fixo, excluindo a linha.
  • Multiple tag_name
    por exemplo tag_name1:tag_name2:tag_rev
    fixo, removendo o segundo nome tag (qual deles você remover provavelmente depende do que eles são).
  • Nome inválido / delimitador revisão. No meu caso o caractere inválido foi sempre z (há apenas diferença de 1 bit entre : ASCII e z).
    por exemplo tag_nameztag_rev
    fixo, substituindo o z com :.

Para ajuda durante a minha investigação eu adicionei uma linha print para cvs2svn_rcsparse\common.py. Se analisar os símbolos falhar, a última tag impressa é a 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)

A impressão adicional adiciona um monte de ruído para a saída por isso pode ser mais agradável para imprimir apenas se uma exceção acontece, mas isso era bom o suficiente para minhas necessidades.


Eu também encontrei este link que acabou por não ser meu problema, mas pode ajudar alguém. Crédito para Christian Haarmann para documentar-lo.

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

No caso da ligação se torna inválida, o resumo é que alguém tinha editado o arquivo xxx,v e seu editor tinha substituído 0x0A (LF) com 0x0D / 0x0A (CR / LF), eo personagem adicional causado o analisador de pensar o arquivo era corrupto.

Eu também tenho erro tal. Quando eu uso cvs2git para migrar um repositório cvs para git, este erro ocorre por vários arquivos. Eu ter detectado que não está faltando um fechamento 0x40 (@) no final do arquivo.

Assim, a minha solução é:

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

Se isto não corrigir o problema, em seguida, compare o conteúdo do arquivo corrompido com o formato RCS-file: rcs_man_page

Uma maneira de resolver isso é executar rcs log *file,v*, o que pode fornecer-lhe algumas dicas.

No meu caso, eu tive alguns arquivos faltando @ 's, alguns arquivos faltando um ponto e vírgula, ea ferramenta que usei para importar meu antigo repositório para o cvspserver tinha jogado em uma versão sem referência.

Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top