2008-10-01 6 views
2

Я работаю на преобразование репозитория CVS, которая имеет следующие символы (среди прочих):При использовании cvs2svn, как вы можете переименовать символы так, чтобы ветка и тег разрешались с тем же именем?

tcm-6.1.0-branch - филиал
tcm-6.1.0 - тег

Использование стандартных преобразований cvs2svn идентифицирует их должным образом. Тем не менее, я хотел бы сделать некоторые очистки во время преобразования. В частности, я хотел бы удалить избыточную часть «ветви» символа ветки, так как она будет находиться в директории «ветви» в svn. Я добавил следующее к symbol_transforms проекта:

RegexpSymbolTransform(r'(.*)-branch', r'\1') 

Теперь я в конечном итоге с «ОШИБКА: Несколько определений символа„кубометр-6.1.0“в ...» для каждого файла, потому что tcm-6.1.0 одновременно ветку и тег. У меня есть несколько пар символов CVS, которые приводят к этой проблеме.

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

Как переименовать эти символы так, чтобы они оставались отдельными и приводили к ветке и тегу с тем же именем?

-

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

ответ

1

RegexpSymbolTransform работает на слишком низком уровне во время разбора файлов репозитория. Поэтому, если вы используете SymbolTransform, чтобы дать двум символам одно и то же имя, они будут рассматриваться как один и тот же символ.

После преобразования можно переименовать ветви и метки, но для этого потребуется явная фиксация SVN, которая останется на вашей истории навсегда, что сделает изучение истории немного сложнее.

Вместо этого вы должны преобразовать ветвь с ее первоначальным именем, но затем сообщите cvs2svn, чтобы сохранить ее в пути SVN /branches/tcm-6.1.0. Таким образом, символ окажется в нужном месте для ветви SVN с нужным именем, но все равно будет обрабатываться cvs2svn в отличие от аналогично названного тега.

Это может быть сделано с помощью --symbol-hints=symbol-hints.txt параметр командной строки или правила стратегии в SymbolHintsFileRule('symbol-hints.txt') символа, где symbol-hints.txt является файл, содержащий строку следующее:

. tcm-6.1.0-branch branch /branches/tcm-6.1.0 .

Единственный недостаток такого подхода, что я могу думать состоит в том, что некоторые сообщения фиксации, которые генерируются автогенератором cvs2svn (например, для создания ветки), укажут на исходное имя ветви.

1

cvs2svn делает много магии между cvs и svn. Вот почему вы не можете «сопоставлять» имена ветвей и тегов, так как cvs2svn не будет знать, какая версия принадлежит в какой директории. Мой совет переименовывает их впоследствии в одном коммите с помощью инструмента, такого как svnmucc. Итак, у вас есть одна фиксация, а затем все на месте.