2008-10-01 10 views
2

Je travaille sur la conversion d'un référentiel CVS qui a les symboles suivants (entre autres):Lors de l'utilisation de cvs2svn, comment pouvez-vous renommer des symboles de sorte qu'une branche et une étiquette se résolvent au même nom?

tcm-6.1.0-branch - une branche
tcm-6.1.0 - une étiquette

En utilisant les transformations standards cvs2svn les identifie correctement. Cependant, j'aimerais faire un peu de nettoyage pendant la conversion. Spécifiquement je voudrais abandonner la partie '-branch' redondante du symbole de branche, puisqu'elle sera dans le répertoire 'branches' dans svn. J'ajouté ce qui suit aux symbol_transforms du projet:

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

Maintenant, je me retrouve avec « ERREUR: définitions multiples du symbole « tcm-6.1.0 » en ... » pour chaque fichier car tcm-6.1.0 est à la fois une branche et une étiquette. J'ai plusieurs paires de symboles CVS qui entraînent ce problème.

Il me semble que puisque les symboles source sont différents et que les répertoires de destination sont différents, cette opération devrait être possible. Y at-il quelque chose qui me manque ou est-ce simplement un défaut de cvs2svn?

Comment puis-je renommer ces symboles de sorte qu'ils restent séparés et aboutissent à une branche et à une étiquette avec le même nom?

-

S'il n'y a pas de travail autour, je vais essayer d'exclure les symboles du problème des règles de conversion et de les déplacer à la main après, bien que je préfère le faire au moment de la conversion.

Répondre

1

RegexpSymbolTransform fonctionne à un niveau trop bas, lors de l'analyse des fichiers du référentiel. Par conséquent, si vous utilisez un SymbolTransform pour donner deux symboles du même nom, ils seront traités comme un seul et même symbole. Il est possible de renommer les branches et les balises après la conversion, mais cela nécessiterait un commit SVN explicite qui restera dans votre histoire pour toujours, rendant l'exploration de l'histoire un peu plus compliquée. Au lieu de cela, vous devez convertir la branche avec son nom d'origine, puis indiquer à cvs2svn de le stocker dans le chemin SVN /branches/tcm-6.1.0. De cette façon, le symbole finira au bon endroit pour une branche SVN avec le nom désiré, mais sera toujours traité par cvs2svn comme distinct de la balise nommée de la même manière.

Cela peut être fait en utilisant l'option de ligne de commande --symbol-hints=symbol-hints.txt ou la règle de stratégie symbole SymbolHintsFileRule('symbol-hints.txt'), où symbol-hints.txt est un fichier contenant une ligne comme la suivante:

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

Le seul inconvénient de cette approche que je peux penser est que certains messages de commit qui sont générés automatiquement par cvs2svn (par exemple, pour la création de la branche) mentionneront le nom de la branche d'origine.

1

cvs2svn fait beaucoup de magie entre cvs et svn. C'est pourquoi vous ne pouvez pas "faire correspondre" les noms des branches et des tags, car alors cvs2svn ne saura pas quelle version appartient à quel répertoire. Mon conseil est de les renommer ensuite en un seul commit avec un outil comme svnmucc. Donc vous avez un seul commit et tout est en place.