Как мне очистить импорт ветвей поставщика CVS?

У меня есть репозиторий CVS с каталогом, содержащим две ветки поставщика. Первоначальный код был получен из одного источника и зарегистрирован с именем поставщика, например X. Несколько лет спустя новый код был зарегистрирован с именем ветви другого поставщика Y.

Если я просматриваю файл rcs (FILE, v) в текстовом редакторе, я вижу X: 1.1.1, несколько тегов ... а затем Y: 1.1.1

Это не вызвало каких-либо известных мне проблем при использовании CVS, но теперь я хочу перейти на Subversion с помощью cvs2svn.

Я получаю следующие ошибки от cvs2svn:

ВНИМАНИЕ: в '/ home / cvs / src / contrib / one-true-awk / FILES, v': ветка '1.1.1' уже имеет имя 'Y', не может также иметь имя 'X', игнорируя последнее

В идеале я хотел бы использовать новый тег поставщика Y для всей истории, но я также хотел бы убрать его и использовать старый тег. В любом случае мне нужно очистить это, чтобы cvs2svn мог преобразовать репозиторий в Subversion.

Есть ли какие-либо команды, которые я могу запустить для файлов из CVS, чтобы исправить этот беспорядок, или ручные шаги в файле, v, которые я могу сделать? Я попытался удалить новую ветвь Y, но это само по себе не работает из-за сумасшедшей нумерации в коммитах. Версия 1.2 была создана из-за второго импорта, что также привело к сбою cvs2svn.


person Lucas Holt    schedule 23.11.2013    source источник
comment
Действительно, непростой бизнес. Точно так же выяснили обе вещи: ① номера ветвей поставщиков должны быть нечетными, а не четными, и ② вы используете разные ветки поставщиков для каждого источника (например, 1.1.1 для $ parent_bsd, 1.1.3 для $ parent_of_parent_bsd, 1.1.101 для FSF, 1.1.103 для XF86, 1.1.109 для lynx и т. Д.) ⇒ в конечном итоге пришлось создать глобальный реестр поставщиков (тег и номер ветки)…   -  person mirabilos    schedule 22.12.2013


Ответы (1)


В итоге я спросил в списке рассылки пользователей cvs2svn. Я получил следующий ответ от Майкла Хаггерти:

Я не верю, что эта ошибка может возникнуть при двойном импорте. AFAIK каждый раз, когда вы импортируете, вы создаете новую ветку поставщика; например 1.1.1, 1.1.3 и т. Д. (Последнее число всегда нечетное для веток поставщика), и каждая ветка поставщика получит свое собственное символическое имя. Ситуация, с которой вы столкнулись, заключается в том, что у вас есть только одна ветка поставщика, 1.1.1, и у нее каким-то образом есть два символических имени: «X» и «Y».

Если вы укажете cvs2svn просто игнорировать нежелательное имя символа, тогда преобразование должно пройти без жалоб. Для этого вам нужно запустить cvs2svn с помощью метода файла параметров, а затем использовать IgnoreSymbolTransform. См. Документацию в cvs2svn-example.options.

Если вы хотите быть очень осторожными, вы можете сначала убедиться, что имя символа, которое вы игнорируете, действительно избыточно в каждом файле. Или, я думаю, также можно было бы преобразовать нежелательное имя символа в желаемое имя символа, потому что cvs2svn игнорирует символы, которые появляются дважды с одинаковым значением. Для этого потребуется что-то вроде

RegexpSymbolTransform (r'X ', r'Y')

Затем я использовал IgnoreSymbolTransform, чтобы скрыть лишние символы.

Кроме того, я столкнулся с вторичной ошибкой из-за файлов, которые были исправлены в HEAD, а затем произошел более новый импорт. Принудительно зафиксировав файлы, я смог вернуть их в HEAD и избежать этого:

ОШИБКА: файл '/ home / cvs / src / contrib / one-true-awk / FIXES, v' имеет ветку по умолчанию = 1.1.1, но также имеет версию 1.2

person Lucas Holt    schedule 27.11.2013