Como dar Commits SVN com Vim

Em alguns projetos, ao se dar um commit, é necessário especificar quais arquivos foram adicionados ou modificados e ainda mencionar o porque. Algo do tipo:

functions.pl - Adicionada a função que faz aquilo e corrigida a função tal que tinha um erro de português.

É realmente um porre ver todos os arquivos que foram modificados e dizer as mudanças, mas é necessário. Aqui vai uma dica pra quem quer melhorar isso e, por que não, automatizar. Vou utilizar o exemplo com o svn, mas adaptem para o que vocês usam.

cd /raiz/do/repositorio
svn status | vim - 

Em alguns projetos, ao se dar um commit, é necessário especificar quais arquivos foram adicionados ou modificados e ainda mencionar o porque. Algo do tipo:

functions.pl - Adicionada a função que faz aquilo e corrigida a função tal que tinha um erro de português.

É realmente um porre ver todos os arquivos que foram modificados e dizer as mudanças, mas é necessário. Aqui vai uma dica pra quem quer melhorar isso e, por que não, automatizar. Vou utilizar o exemplo com o svn, mas adaptem para o que vocês usam.

cd /raiz/do/repositorio
svn status | vim -
svn commit -F /tmp/commit

Aquela segunda linha, joga a saída do comando `svn status` em um buffer no Vim. Assim, podemos editar melhor. Caso o servidor seja externo e demore muito uma resposta, apenas aguarde. A saída do shell irá para buffer, apenas aguarde.

Com tudo pronto, podemos fazer algumas substituições:

:%s/^A\s\+/[ADICIONADO] /g
:%s/^D\s\+/[REMOVIDO] /g
:%s/^M\s\+/[MODIFICADO] /g

Cada letra da primeira coluna, indica o status do arquivo no projeto. Uma lista completa com as opções pode ser encontrada em http://svnbook.red-bean.com/en/1.4/svn.ref.svn.c.status.html

Agora você organiza seu log. Escreve porque foi adicionado o arquivo X, removido o arquivo Y e etc. Depois de pronto, basta salvá-lo e utilizá-lo como log do commit.

:sav /tmp/commit
svn commit -F /tmp/commit
rm /tmp/commit

Uma outra maneira de se fazer isso é usando o Vim como editor default do SVN.

vim ~/.bashrc

Acrescente as seguintes linhas:

export SVN_EDITOR=/usr/bin/vim

Agora, ao usar `svn commit`, o vim irá ser aberto para você especificar o motivo.

Acho que é isso! Comentem =)