Conversão de CVS para SVN
A conversão do nosso repositório CVS para o Subversion (SVN) foi realizada utilizando a macro Pyton cvs2svn.
Para isso, seguimos os seguintes passos:
- Efetuar o download e instalar o Subversion (em http://svn1clicksetup.tigris.org pode ser efetuado um único download que instala a interface de linha de comando, a interface gráfica e cria o repositório, tudo em um único setup).
- Assegurar que o Python estivesse instalado no servidor, no nosso caso, ele tinha sido instalado junto com o software Plone
- Descompactar o cvs2svn para a pasta C:\cvs2svn
- Obter o utilitário sort.exe, requerido pela macro (tivemos que fazer o download do arquivo UnxUtils.zip de http://unxutils.sourceforge.net/ e extrair dele o arquivo sort.exe, e gravando-o na pasta C:\cvs2svn)
- Incluir o Python e o CVSNT no path, o que no nosso caso foi feito com esta linha de comando:
PATH=%PATH%;C:\Arquivos de Programas\CVSNT;C:\Arquivos de Programas\Plone 2\Python
Com isto, o prompt de comando estava pronto para executar o cvs2svn. Comecei executando este comando dentro da pasta "C:\cvs2svn":
python cvs2svn -s C:\BaseSVN --dry-run --use-cvs C:\BaseCVS
Obs.: O parâmetro --dry-run faz com que o cvs2svn apenas simule a conversão, sem gravar nada no repositório de destino.
O cvs2svn não conseguiu reconhecer algumas dlls que estavam na base do CVS (arquivos "ChilkatFTP.dll,v" e "ChilkatMail2.dll,v"). A execução abortava quando chegava em um destes arquivos. Precisei remover ambos e reexecutar o comando para prosseguir.
Na seqüência o cvs2svn emitiu uma mensagem dizendo que não conseguiu identificar "V5R4Beta14" como uma tag ou um branch. Como nosso repositório CVS não possui branches, decidi incluir a opção "--force-tag V5R4Beta14" na linha de comando:
python cvs2svn -s C:\BaseSVN --dry-run --use-cvs C:\BaseCVS --force-tag V5R4Beta14
Com isto, a macro rodou até o final, mas emitiu inúmeras mensagens de warning por causa de caracteres especiais (acentos, etc) encontrados em nomes de arquivo, comentários e nomes de tags.
Incluí na linha de comando a opção de encoding mais adequada para o idioma português (latin_1). O comando ficou assim (tudo na mesma linha):
python cvs2svn -s C:\BaseSVN --dry-run --use-cvs C:\BaseCVS --force-tag V5R4Beta14 --encoding latin_1
Com isto a macro rodou até o fim sem problemas. Resolvi então reexecutar o comando sem a opção --dry-run para que ele realmente fizesse a conversão.
python cvs2svn -s C:\BaseSVN --use-cvs C:\BaseCVS --force-tag V5R4Beta14 --encoding latin_1
Imediatamente recebi uma mensagem de erro porque o meu repositório SVN já existia na pasta C:\BaseSVN. Precisei incluir a opção --existing-svnrepos:
python cvs2svn -s C:\BaseSVN --use-cvs C:\BaseCVS --force-tag V5R4Beta14 --encoding latin_1 --existing-svnrepos
Com isto, a conversão finalmente se realizou sem nenhuma mensagem de erro. Com nosso servidor tendo alguns problemas de performance, nosso repositório CVS levou cerca de 16 horas para ser convertido.
Completada a conversão passamos para a etapa de disponibilizar o repositório para os usuários. Editamos os arquivos de configuração do repositório, alterando as opções de segurança para não permitir usuários não antenticados e criando usuários e senhas para todos os colaboradores.
- A seguir tivemos que liberar a porta 3690 (porta padrão do SVN) no firewall do servidor. Com isso, o repositório pôde ser acessado pela intranet. Infelizmente, não tínhamos como liberar esta porta para acesso externo, pois não tínhamos acesso a este firewall. A solução encontrada foi fazer com que o SVN utilizasse a mesma porta do CVS (2460), que já estava liberada para acesso externo.
Esta operação foi complicada, envolvendo manutenção no serviço do SVN no servidor. Tivemos que usar as seguintes linhas de comando:
1) Parar o serviço do SVN
net stop SVNService
2) Excluir o serviço do SVN
sc delete SVNService
3) Recriar o serviço SVN informando a nova porta
"C:\Arquivos de Programas\Subversion\bin\svnservice.exe" -install --daemon --root C:\Kankei\BaseSVN --listen-port 2401
4) Reiniciar o serviço:
net start SVNService
Com isto, o repositório passou a ser acessível externamente na porta 2401. No TortoiseSVN, pode ser usada esta URL:
