cvs2svn завершается с ошибкой «xxx не является допустимым, v файл» - PullRequest
5 голосов
/ 21 апреля 2009

Я наконец-то нашел ответ на свой вопрос, когда захотел его опубликовать! Однако я все равно опубликую его, включая мой ответ, на случай, если это поможет кому-то еще:

При конвертации из CVS в Subversion cvs2svn не удалось на некоторых файлах с сообщением

"xxx is not a valid ,v file"

В чем проблема?

Ответы [ 4 ]

3 голосов
/ 21 апреля 2009

Как оказалось, CVSNT пропускает последние 0xa в некоторых файлах, где они нужны cvs2svn Это можно легко исправить с помощью следующего кода 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);
      }
    }
  }
}
1 голос
/ 18 декабря 2015

В моем случае произошла ошибка в разделе symbols файла xxx,v. Ожидаемый формат <i>tag_name</i>:<i>tag_rev</i>, но были случаи:

  • Отсутствует :<i>tag_rev</i>
    например. <i>tag_name</i>
    Исправлено удалением строки.
  • Несколько <i>tag_name</i>
    например. <i>tag_name1</i>:<i>tag_name2</i>:<i>tag_rev</i>
    Исправлено путем удаления имени второго тега (который вы, вероятно, удаляете, зависит от того, что они есть).
  • Неверное имя / разделитель редакции. В моем случае недопустимый символ всегда был z (разница между ASCII : и z только 1 бит).
    например. <i>tag_name</i>z<i>tag_rev</i>
    Исправлено путем замены z на :.

Чтобы помочь во время моего расследования, я добавил print строку к cvs2svn_rcsparse\common.py. Если синтаксический анализ символов не удался, причиной является последний напечатанный тег.

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)

Дополнительная печать добавляет много шума к выводу, поэтому было бы лучше печатать только в случае исключения, но этого было достаточно для моих нужд.


Я также нашел эту ссылку, которая оказалась не моей проблемой, но может помочь кому-то еще. Благодарим Кристиана Хаармана за документальное оформление.

http://tigris -scm.10930.n7.nabble.com / предложения-для-cvs2svn-фикс-для-ошибки-Quot-MyFile-Txt-v-это-не-а-Валид-в- файл-Quot-td54240.html

В случае, если ссылка становится недействительной, сводится к тому, что кто-то отредактировал файл xxx,v и его редактор заменил 0x0A (LF) на 0x0D / 0x0A (CR / LF), и дополнительный символ заставил анализатор думать файл был поврежден.

0 голосов
/ 06 декабря 2015

Один из способов решения этой проблемы - запустить rcs log *file,v*, что может дать вам некоторое представление.

В моем случае в некоторых файлах отсутствовала @, в некоторых файлах отсутствовала точка с запятой, а инструмент, который я использовал для импорта моего старого репозитория на cvspserver, был выпущен в версии без ссылок.

Удачи!

0 голосов
/ 28 июня 2013

У меня тоже такая ошибка. Когда я использую cvs2git для переноса репозитория cvs в git, эта ошибка возникает для нескольких файлов. Я обнаружил, что в конце файла отсутствует закрывающая 0x40 (@) .

Итак, мое решение:

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

Если это не решит проблему, сравните содержимое поврежденного файла с форматом RCS-файла: rcs_man_page

...