Domanda

Ho finalmente trovato una risposta alla mia domanda quando ho voluto pubblicarlo! Comunque sarò ancora post-it, tra cui la mia risposta, nel caso in cui aiuta a qualcun altro:

Quando la conversione da CVS a Subversion cvs2svn fallito su alcuni file con il messaggio

"xxx is not a valid ,v file"

Qual è il problema?

È stato utile?

Soluzione

Come si scopre CVSNT omette l'ultima 0xa da alcuni file dove cvs2svn ha bisogno di loro. Questo può essere facilmente risolto con il seguente codice 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);
      }
    }
  }
}

Altri suggerimenti

Nel mio caso ci fosse la corruzione nella sezione symbols del file xxx,v. Il formato previsto è tag_name:tag_rev, ma ci sono stati casi di:

  • Manca :tag_rev
    esempio tag_name
    fisso cancellando la linea.
  • Multiple tag_name
    esempio tag_name1:tag_name2:tag_rev
    fisso rimuovendo il secondo nome di tag (che uno si rimuove probabilmente dipende da quello che sono).
  • non valido delimitatore nome / revisione. Nel mio caso il carattere non valido è stato sempre z (c'è solo differenza 1-bit tra : ASCII e z).
    esempio tag_nameztag_rev
    fisso sostituendo il z con :.

Per aiutare durante la mia indagine ho aggiunto una linea print a cvs2svn_rcsparse\common.py. Se l'analisi dei simboli non riesce, l'ultima etichetta stampata è 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 stampa addizionale aggiunge un bel po 'di rumore all'uscita quindi potrebbe essere più bello di stampare solo dopo un'eccezione accade, ma questo era abbastanza buono per le mie esigenze.


Inoltre ho trovato questo link che si è rivelata non essere il mio problema, ma può aiutare qualcun altro. Si ringrazia Christian Haarmann per documentare esso.

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

Nel caso in cui il link non è più valido, la sintesi è che qualcuno aveva modificato il file xxx,v e loro editore aveva sostituito 0x0A (LF) con 0x0D / 0x0A (CR / LF), e il carattere aggiuntivo causato il parser di pensare il file era corrotta.

Ho anche un errore del genere. Quando uso cvs2git per la migrazione di un repository CVS a git, questo errore si verifica per diversi file. Ho rilevato che c'è manca un chiusura 0x40 (@) alla fine del file.

Quindi la mia soluzione è:

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

Se questo non risolve il problema, quindi confrontare il contenuto del file danneggiato con il formato RCS-file: rcs_man_page

Un modo per risolvere questo è quello di eseguire rcs log *file,v*, che potrebbe fornire qualche informazione.

Nel mio caso, ho avuto alcuni file mancanti @ 's, alcuni file mancanti un punto e virgola, e lo strumento che ho usato per importare il mio vecchio repository sul cvspserver aveva gettato in una versione senza riferimenti.

In bocca al lupo!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top