Frage

ich endlich eine Antwort auf meine Frage gefunden, wenn ich es schreiben wollte! Ich werde jedoch immer noch veröffentlichen, einschließlich meiner Antwort, falls es hilft jemand anderes:

Bei der Konvertierung von CVS auf Subversion cvs2svn auf einigen Dateien mit der Meldung fehlgeschlagen

"xxx is not a valid ,v file"

Was ist das Problem?

War es hilfreich?

Lösung

Wie sich herausstellt CVSNT lässt die letzte 0xa von einigen Dateien, in denen cvs2svn sie braucht. Dies kann leicht mit dem folgenden C # -Code festgelegt werden:

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

Andere Tipps

In meinem Fall gibt es Korruption in dem symbols Abschnitt der xxx,v Datei. Das erwartete Format ist tag_name:tag_rev, aber es gab Fälle:

  • Missing :tag_rev
    z.B. tag_name
    behoben, indem die Linie zu löschen.
  • Mehrere tag_name
    z.B. tag_name1:tag_name2:tag_rev
    behoben, indem den zweiten Tag-Namen zu entfernen (die man Sie wahrscheinlich entfernen hängen davon ab, was sie sind).
  • Ungültige Name / Revision Begrenzer. In meinem Fall wurden die ungültigen Zeichen immer z (zwischen ASCII : und z nur 1-Bit-Differenz ist).
    z.B. tag_nameztag_rev
    Fest durch die z mit : ersetzt werden.

Um während meiner Untersuchung zu helfen, habe ich eine print Linie cvs2svn_rcsparse\common.py. Wenn die Symbole Parsing fehlschlägt, gedruckt der letzte Tag ist die Ursache.

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)

Der zusätzliche Druck fügt ziemlich viel Lärm auf den Ausgang, so dass es schöner sein könnte, nur zu drucken, wenn eine Ausnahme geschieht, aber das war gut genug für meine Bedürfnisse.


Ich fand auch diese Verbindung, die nicht mein Problem entpuppte aber kann jemand anders helfen. Credit Christian Haarmann für sie zu dokumentieren.

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

Falls der Link ungültig wird, ist die Zusammenfassung, dass jemand die xxx,v Datei bearbeitet hatte und deren Redakteur hatte 0x0A (LF) mit 0x0D / 0x0A (CR / LF) ersetzt, und die zusätzlichen Zeichen verursacht der Parser die Datei denken korrupt war.

Ich habe auch einen solchen Fehler. Wenn ich cvs2git verwenden, um ein CVS-Repository migriert werden für mehrere Dateien git, tritt dieser Fehler auf. Ich habe festgestellt, dass es fehlt ein Schließen 0x40 (@) am Ende der Datei.

Also meine Lösung ist:

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

Wenn dies das Problem nicht beheben, dann vergleichen Sie den Inhalt der beschädigten Datei mit dem RCS-Dateiformat: rcs_man_page

Eine Möglichkeit, dies zu beheben ist rcs log *file,v* laufen, die Ihnen einen kleinen Einblick bieten können.

In meinem Fall hatte ich einige Dateien fehlen @ 's, einige Dateien ein Semikolon fehlt, und das Werkzeug, ich meine alte Repository importieren auf die cvspserver in einer nicht referenzierten Version geworfen hatten.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top