2009-04-21 10 views
5

W końcu znalazłem odpowiedź na moje pytanie, kiedy chciałem to opublikować! Jednak nadal będę pisać go, w tym moją odpowiedź, w przypadku, gdy ktoś inny pomaga:cvs2svn kończy się niepowodzeniem z "xxx is not valid, v file"

Przy konwersji z CVS do Subversion cvs2svn powiodło się w niektórych plików z komunikatem

"xxx is not a valid ,v file" 

czym problem?

Odpowiedz

3

Okazuje się, że CVSNT pomija ostatnie 0xa z niektórych plików, w których wymaga ich cvs2svn. Można to łatwo naprawić za pomocą następującego kodu 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); 
     } 
    } 
    } 
} 
0

Mam również taki błąd. Kiedy używam cvs2git w celu migracji repozytorium CVS do git, ten błąd występuje dla kilku plików. Wykryłem, że brakuje końca na końcu pliku 0x40 (@).

Więc moje rozwiązanie to:

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

Jeśli to nie rozwiąże problemu, a następnie porównanie zawartości uszkodzonego pliku z formatem RCS-file: rcs_man_page

0

Jednym ze sposobów rozwiązania tego ma uruchomić rcs log *file,v*, co może zapewnić ci trochę wglądu.

W moim przypadku brakowało niektórych plików @, niektóre pliki nie zawierały średnika, a narzędzie, które zostało użyte do zaimportowania mojego starego repozytorium na serwer cvspserver, zostało zgłoszone w wersji bez odniesienia.

Powodzenia!

1

W moim przypadku wystąpiło uszkodzenie w sekcji symbols pliku xxx,v. Oczekiwany format tag_name:tag_rev, ale były przypadki:

  • brakujące :tag_rev
    np tag_name
    Naprawiono przez usunięcie linii.
  • Wiele tag_name
    np. tag_name1:tag_name2:tag_rev
    Naprawiono przez usunięcie drugiej nazwy znacznika (która zostanie usunięta prawdopodobnie zależy od tego, jaka jest).
  • Nieprawidłowy ogranicznik nazwy/rewizji. W moim przypadku nieprawidłowy znak zawsze był z (istnieje tylko 1-bitowa różnica między ASCII : i z).
    np. tag_nameztag_rev
    Naprawiono, zastępując z wartością :.

Aby pomóc w trakcie mojego dochodzenia, dodałem linię print do cvs2svn_rcsparse\common.py. Jeśli przetwarzanie symboli nie powiedzie się, przyczyną jest ostatni wydrukowany znacznik.

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) 

Dodatkowy druk dodaje sporo szumu na wyjściu, więc to może być ładniejszy drukować tylko jeśli wyjątek dzieje, ale to było wystarczająco dobre dla moich potrzeb.


Znalazłem również ten link, który okazał się nie być moim problemem, ale może pomóc komuś innemu. Podziękowania dla Christiana Haarmanna za udokumentowanie tego.

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

W przypadku, gdy połączenie staje się nieważny, podsumowanie jest, że ktoś edytowany plik xxx,v i ich edytor zastąpił 0x0A (LF) z 0x0D/0x0A (CR/LF), a dodatkowy charakter spowodował parser, aby sądzić, że plik jest uszkodzony.

Powiązane problemy