Cuando use cvs2svn, ¿cómo puede cambiar el nombre de los símbolos de modo que una rama y una etiqueta se resuelvan con el mismo nombre?

StackOverflow https://stackoverflow.com/questions/157599

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando para convertir un repositorio CVS que tenga los siguientes símbolos (entre otros):

tcm-6.1.0-branch : una rama
tcm-6.1.0 - una etiqueta

Usando las transformaciones estándar, cvs2svn las identifica correctamente. Sin embargo, me gustaría hacer un poco de limpieza durante la conversión. Específicamente, me gustaría eliminar la porción redundante '-branch' del símbolo de rama, ya que estará en el directorio 'sucursales' en svn. Agregué lo siguiente a las symbol_transforms del proyecto:

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

Ahora termino con " ERROR: Múltiples definiciones del símbolo 'tcm-6.1.0' en ... " para cada archivo porque tcm-6.1.0 es tanto una rama como una etiqueta. Tengo varios pares de símbolos CVS que resultan en este problema.

Me parece que, dado que los símbolos de origen son diferentes y los directorios de destino son diferentes, esta operación debería ser posible. ¿Hay algo que me falta o es simplemente una deficiencia de cvs2svn?

¿Cómo puedo cambiar el nombre de estos símbolos para que permanezcan separados y den como resultado una rama y una etiqueta con el mismo nombre?

-

Si no hay solución, intentaré excluir los símbolos del problema de las reglas de conversión y luego moverlos a mano, aunque prefiero hacerlo en el momento de la conversión.

¿Fue útil?

Solución

RegexpSymbolTransform funciona a un nivel demasiado bajo, durante el análisis de los archivos del repositorio. Por lo tanto, si utiliza un SymbolTransform para dar a dos símbolos el mismo nombre, se tratarán como uno y el mismo símbolo.

Es posible cambiar el nombre de ramas y etiquetas después de la conversión, pero esto requeriría una confirmación SVN explícita que permanecerá en su historial para siempre, lo que hace que la exploración del historial sea un poco más complicada.

En su lugar, debe convertir la rama con su nombre original, pero luego decirle a cvs2svn que la almacene en la ruta SVN /branches/tcm-6.1.0. De esa manera, el símbolo terminará en el lugar correcto para una rama SVN con el nombre deseado, pero aún será tratado por cvs2svn como distinto de la etiqueta con un nombre similar.

Esto se puede hacer usando la opción de línea de comando --symbol-hints = symbol-hints.txt o el símbolo SymbolHintsFileRule ('symbol-hints.txt') regla de estrategia, donde symbol-hints.txt es un archivo que contiene una línea como la siguiente:

  

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

La única desventaja de este enfoque en la que puedo pensar es que algunos mensajes de confirmación que son generados automáticamente por cvs2svn (por ejemplo, para la creación de la rama) mencionarán el nombre original de la rama.

Otros consejos

cvs2svn hace mucha magia entre cvs y svn. Es por eso que no puedes '' igualar '' los nombres de ramas y etiquetas, ya que entonces cvs2svn no sabrá qué versión pertenece a qué directorio. Mi consejo es renombrarlos luego en un solo commit con una herramienta como svnmucc . Entonces tiene una única confirmación y luego todo está en su lugar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top