Ao usar cvs2svn como você pode renomear símbolos de tal forma que um ramo e tag resolver para o mesmo nome?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em converter um repositório CVS, que tem os seguintes símbolos (entre outros):

tcm-6.1.0-branch - um ramo
tcm-6.1.0 - uma tag

Usando as transformações padrão cvs2svn identifica-los adequadamente. No entanto, eu gostaria de fazer alguns até limpo durante a conversão. Especificamente eu gostaria de largar o redundante parte '-branch' do símbolo ramo, uma vez que será no diretório 'filiais' no SVN. Eu adicionei o seguinte para os symbol_transforms do projeto:

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

Agora eu acabar com "Erro: várias definições do símbolo 'TCM-6.1.0' em ..." para cada arquivo porque tcm-6.1.0 é tanto um ramo e uma tag. Eu tenho vários pares símbolo CVS que resultam neste problema.

Parece-me que desde que os símbolos de código são diferentes e os diretórios de destino são diferentes esta operação deve ser possível. Existe algo que eu estou ausente ou é simplesmente uma lacuna de cvs2svn?

Como posso renomear esses símbolos de tal forma que eles permanecem separados e resultar em um ramo e um tag com o mesmo nome?

-

Se não há trabalho em torno Vou tentar excluir os símbolos problema das regras de conversão e movê-los manualmente depois, embora eu prefiro fazê-lo em tempo de conversão.

Foi útil?

Solução

RegexpSymbolTransform opera a um nível demasiado baixo, durante a análise dos arquivos do repositório. Portanto, se você usar um SymbolTransform para dar dois símbolos do mesmo nome, eles serão tratados como um só e o mesmo símbolo.

É possível renomear as ramificações e marcas após a conversão, mas isso exigiria um SVN consolidação explícita que permanecerá em sua para sempre a história, tornando exploração história um pouco mais complicado.

Em vez disso, você deve converter o ramo com seu nome original, mas em seguida, dizer cvs2svn para armazená-lo para o caminho /branches/tcm-6.1.0 SVN. Dessa forma, o símbolo vai acabar no lugar certo para um ramo SVN com o nome desejado, mas ainda vai ser tratada por cvs2svn como distinta da tag com mesmo nome.

Isto pode ser feito usando a opção --symbol-hints=symbol-hints.txt de linha de comando ou a regra estratégia símbolo SymbolHintsFileRule('symbol-hints.txt'), onde symbol-hints.txt é um arquivo contendo uma linha como a seguinte:

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

A única desvantagem dessa abordagem que eu posso pensar é que alguns cometem mensagens que são geradas automaticamente por cvs2svn (por exemplo, para a criação do ramo) vai mencionar o nome de filial originais.

Outras dicas

cvs2svn faz um monte de magia entre cvs e SVN. É por isso que você não pode "corresponder" os nomes dos ramos e rótulos, como então cvs2svn não vai saber qual a versão pertence no qual dir. Meu conselho é renomeá-los depois em um único comprometer com uma ferramenta como svnmucc . Então você tem uma única confirmação e, em seguida, tudo está no lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top