Integração Mantis e SVN

February 2nd, 2010

Category: Desenvolvimento

Este artigo trata de como integrar o Mantis, um bug tracker popular, com o SVN. O objetivo é automatizar a atualização de issues no mantis a partir de commits de alterações pelo SVN.

Basicamente, deseja-se eliminar a atividade adicional de logar no mantis para marcar uma issue como “RESOLVED” após a conclusão da etapa de codificação.

Assume-se que você já tem o Mantis e o SVN instalados e funcionando adequadamente de modo isolado. Caso ainda não tenha, procure por tutoriais na net sobre como instalá-los.

Outra premissa é que você está trabalhando em um servidor Linux. Em ambientes (ergh) Windows o procedimento pode ser diferente, não sei e não me pergunte… 🙂

Antes de mais nada, devo citar os devidos créditos. Quase tudo que fiz aqui veio do tutorial encontrado em http://www.grafxsoftware.com/option.php/182. Apenas fiz algumas atualizações, como por exemplo arquivos que mudaram de lugar, etc.

Bom, o primeiro passo é criar um usuário no Mantis para ser usado pelo script. Você pode criar um usuário chamado “svn”, por exemplo. É importante que ele tenha permissão nos seus projetos de alterar o status de issues. Coloque-o como “developer” que tudo vai ficar bem.

A regra fundamental é a exigência de um pequeno padrão de texto nos comentários dos commits no SVN. Sempre que você (ou o programador) referenciar a issue no texto de comentário, esse texto será adicionado como uma nota no registro da issue no Mantis. Para isso, basta que o texto contenha um padrão do tipo:

– issue #4

ou

– bug #00456

Então, se o comentário for algo do tipo: “Corrigido caminhos relativos. Alteração referente a issue #5647”, esse texto será adicionado como nota no registro da issue número 5647 no Mantis.

E, se o texto contenha um padrão do tipo:

– fixes issue #5466

ou

– fixed issue #5466

ou ainda

– fixed bug #5466

a issue terá seu status alterado, além da incorporação do texto como nota. O status irá para RESOLVED e a resolution para FIXED. É claro que você poderá mudar no código o status final que deseja, ou até mesmo o padrão de texto a ser procurado, colocando em Português, por exemplo.

Vamos lá. Vá para o diretório onde você tem o Mantis instalado. A partir de agora vou me referir a ele como MANTIS_PATH, pois cada um tem o seu e não mostra pra ninguém (sim, que nem aquilo).

Neste diretório, abra, com seu vi preferido, o arquivo de configuração do Mantis, chamado config_inc.php e inclua o código abaixo após as linhas de código já existentes. Obviamente antes do delimitador de código final, o famoso “?>”.

Clique no link abaixo para ver o código.

{code lang:php title:”config_inc.php”}

 

# Mantenha o trecho de código original do arquivo aqui
#
# Account to be used by the source control script.  The account must be enabled
# and must have the appropriate access level to add notes to all issues even
# private ones (DEVELOPER access recommended).
$g_source_control_account = ‘svn’;

# For open source projects it is expected that the notes be public VS_PUBLIC, however,
# for non-open source it will probably be VS_PRIVATE.
$g_source_control_notes_view_status = VS_PRIVATE;

# Regular expression used to detect issue ids within checkin comments.
# see preg_match_all() documentation at (detect bug or issue in comment)
$g_source_control_regexp = ‘/b(?:bug|issue)s*[#]{0,1}(d+)b/i’;

# If set to a status, then after a checkin with a log message that matches the regular expression in
# $g_source_control_fixed_regexp, the issue status is set to the specified status.

# If set to OFF, the issue status is not changed. Use CLOSED if you prefer.
$g_source_control_set_status_to = RESOLVED;

# Whenever an issue status is set to $g_source_control_set_status_to, the issue resolution
# is set to the value specified for this configuration.
$g_source_control_set_resolution_to = FIXED;

# Regular expression used to detect the fact that an issue is fixed and extracts
# its issue id.  If there is a match to this regular expression, then the issue
# will be marked as resolved and the resolution will be set to fixed.
$g_source_control_fixed_regexp = ‘/bfix(?:ed|es)s+(?:bug|issue)?s*[#]{0,1}(d+)b/i’;

{/code}

Feito isso, você já pode testar o funcionamento do casamento de padrão.

Embaixo de MANTIS_PATH, tem um subdiretório chamado scripts. Nele vamos encontrar um… script!!!… que podemos usar para testar essa parte da integração.

Ah, mas antes disso, é claro que você tem que criar (reportar) uma issue de teste no Mantis. Memorize seu número.

Criada a issue, no shell, dentro do subdir scripts, execute o comando abaixo, trocando o número 4 pelo número da sua issue de teste.

/usr/bin/php checkin.php <<< “hlbog fixed issue #4”

Funcionou?

Excelente.

Agora a última parte. Aqui precisamos fazer com que uma operação de commit no SVN chame automagicamente o script de checkin que acabamos de executar manualmente.

Pra isso temos os gloriosos hooks! Fácil. Vá para o diretório do seu repositório SVN, no servidor mesmo, não é na sua cópia de trabalho local. Neste local tem um subdiretório chamado hooks, e lá vários arquivos com extensão tmpl, que são scripts de exemplo que vem na instalação do SVN. Mas você irá criar seu próprio arquivos chamado post-commit. Isso mesmo, sem extensão nenhuma.

O conteúdo desse arquivo será:

Clique no link abaixo para ver o código.

{code lang:bash title:”post-commit”}
#!/bin/bash

REPOS=”$1″
REV=”$2″

auth=$(svnlook author -r $REV $REPOS)
dt=$(svnlook date -r $REV $REPOS)
changed=$(svnlook changed -r $REV $REPOS)
log=$(svnlook log -r $REV $REPOS)
n=$’n’
cd “MANTIS_PATH
echo -n “Changeset [$] by $auth, $dt$n$log$n$changed” | /usr/bin/php -q “./scripts/checkin.php” > /dev/null

exit 0

{/code}

Repare que você deve colocar o caminho para o SEU Mantis no código.

Altere a permissão do arquivo para execução:

chmod 550 post-commit

And… we’re done!

good coding.

Helder Garcia

No comments yet


Leave a Reply

Your email address will not be published. Required fields are marked *