Question

J'ai finalement trouvé une réponse à ma question quand je voulais le poster! Cependant, je posterai encore, y compris ma réponse, au cas où il aide quelqu'un d'autre:

Lors de la conversion de CVS à Subversion cvs2svn a échoué sur certains fichiers avec le message

"xxx is not a valid ,v file"

Quel est le problème?

Était-ce utile?

La solution

Il se trouve que le dernier CVSNT omet 0xa de certains fichiers où cvs2svn a besoin d'eux. Ceci peut être facilement fixé avec le code c # suivant:

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

Autres conseils

Dans mon cas, il y avait la corruption dans la section symbols du fichier xxx,v. Le format attendu est tag_name:tag_rev, mais il y avait des cas de:

  • manquant :tag_rev
    par exemple tag_name | Fixe en supprimant la ligne.
  • Multiple tag_name
    par exemple tag_name1:tag_name2:tag_rev | Fixe en enlevant le deuxième nom de la balise (celui que vous supprimez dépend probablement de ce qu'ils sont).
  • Nom non valide / delimiter de révision. Dans mon cas, le caractère non valide a toujours été z (il n'y a qu'une différence de 1 bit entre : ASCII et z).
    par exemple tag_nameztag_rev | Fixe en remplaçant le z avec :.

Pour aider au cours de mon enquête, j'ai ajouté une ligne de print à cvs2svn_rcsparse\common.py. Si l'analyse syntaxique des symboles échoue, la dernière étiquette imprimée est la cause.

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)

L'impression supplémentaire ajoute beaucoup de bruit à la sortie de sorte qu'il pourrait être plus agréable de n'imprimer si une exception se produit, mais cela était assez bon pour mes besoins.


J'ai aussi trouvé ce lien qui se est avéré ne pas être mon problème, mais peut aider quelqu'un d'autre. Crédit à Christian Haarmann pour documenter.

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

Dans le cas où le lien devient invalide, le résumé est que quelqu'un avait modifié le fichier de xxx,v et leur éditeur avait remplacé 0x0A (LF) avec 0x0D / 0x0A (CR / LF), et le caractère supplémentaire causé l'analyseur de penser le fichier était corrompu.

J'ai aussi une telle erreur. Lorsque j'utilise cvs2git pour migrer un dépôt cvs à git, cette erreur se produit pour plusieurs fichiers. J'ai détecté qu'il ya un manque de clôture à la fin du fichier 0x40 (@) .

Donc, ma solution est:

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

Si cela ne résout pas le problème, puis de comparer le contenu du fichier corrompu avec le format RCS-file: rcs_man_page

Une façon de résoudre c'est d'exécuter rcs log *file,v*, ce qui peut vous donner un aperçu.

Dans mon cas, j'ai eu quelques fichiers manquants @ 's, certains fichiers manquants un point-virgule, et l'outil que je l'habitude d'importer mon ancien référentiel sur le cvspserver avait jeté dans une version non référencée.

Bonne chance!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top