Já abordei esse assunto no blog, mas irei retomá-lo por um instante. Imagine que você tem uma pequena equipe de desenvolvimento de software, mas depois de tantas alterações de escopo e solicitações de mudança seu projeto já não é mais inteligível, tão pouco existe qualquer ordem na criação dos tickets ou na garantia de que as alterações estão sendo devidamente registradas nos tickets. (pressupondo o uso do Trac aqui).

Vimos em artigo anterior como referenciar ou fechar um tickets no ato do “commit” da revisão (veja o artigo), mas nesta explanação não existe nenhum mecanismo para garantir que as revisões sejam enviadas apenas para tickets abertos e aceitos, para isso vejamos como configurar o repositório subversion para essas tarefas. Read more

Estou escrevendo um artigo sobre Redes Neurais, mas como é um assunto cheio de detalhes, não estará pronto até segunda-feira, recomendo neste meio tempo a leitura do que considero uma obra prima da literatura técnica para desenvolvedores… Getting Real é uma genialidade de ideias e sugestões para quem quer ganhar dinheiro desenvolvendo software, meus conceitos mudaram completamente após a leitura deste livro.

Visite: http://gettingreal.37signals.com/

Quem já utiliza o Subversion para gerenciar o desenvolvimento de seus softwares sabe como ele pode agilizar e controlar o processo. Uma função interessante do Subversion é poder “hookar” algumas ações, tais como: Após o commit, Antes do commit, Ao lockar, etc. Neste artigo veremos como fazer para que “após-um-commit” de uma nova revisão, o script feche automaticamente um ticket aberto no Trac.

A forma de utilização será “svn ci” e no log adicionar “(close #ticket-number) ou (refs #ticket-number)” antes do comentário normal da revisão.

Para começar a configuração primeiro devemos entrar na pasta do projeto Subversion, onde iremos configurar o “hook”.

$ cd /var/lib/svn/+projeto+/

Em seguida acessar a pasta “hooks”:

$ cd hooks

$ ls -l

-rw-rw-r– 1 root www-data 1996 2007-09-26 15:19 post-commit.tmpl
-rw-rw-r– 1 root www-data 1673 2007-09-26 15:19 post-lock.tmpl
-rw-rw-r– 1 root www-data 2290 2007-09-26 15:19 post-revprop-change.tmpl
-rw-rw-r– 1 root www-data 1602 2007-09-26 15:19 post-unlock.tmpl
-rw-rw-r– 1 root www-data 2969 2007-09-26 15:19 pre-commit.tmpl
-rw-rw-r– 1 root www-data 2038 2007-09-26 15:19 pre-lock.tmpl
-rw-rw-r– 1 root www-data 2764 2007-09-26 15:19 pre-revprop-change.tmpl
-rw-rw-r– 1 root www-data 1979 2007-09-26 15:19 pre-unlock.tmpl
-rw-rw-r– 1 root www-data 2137 2007-09-26 15:19 start-commit.tmpl

Veja que existem templates para várias ações que podem ser configuradas, recomendo ler mais sobre esse assunto para fazer as demais configurações, para nosso caso o que nos interessa é o “post-commit.tmpl”, devemos renomeá-lo para “post-commit” e torná-lo executável.

$ sudo mv post-commit.tmpl post-commit

$ sudo chmod +x post-commit

Depois editá-lo e adicionar as linhas que irão chamar o script do Trac, conforme abaixo:

$ sudo vim post-commit

— code —

REPOS=”$1″
REV=”$2″
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV=’/var/lib/trac/+projeto+/’
TRAC_URL=’http://trac/+projeto+/’

/usr/bin/python /usr/share/doc/trac/contrib/trac-post-commit-hook \
-p “$TRAC_ENV” \
-r “$REV” \
-u “$AUTHOR” \
-m “$LOG” \
-s “$TRAC_URL”
— code —

Se você está fazendo essa configuração pela primeira vez, você deve comentar todas as demais linhas deste arquivo, deixando apenas as descritas acima.
Agora vamos habilitar o script do Trac, primeiro devemos acessar o diretório “contrib” do Trac, que no Ubuntu está localizado em:

$ cd /usr/share/doc/trac/contrib/

Caso o arquivo esteja compactado, descompactá-lo usando o comando abaixo:

$ sudo gunzip trac-post-commit-hook.gz

E por fim torná-lo executável

$ sudo chmod +x trac-post-commit-hook

Pronto! Agora quando fizer o commit de uma revisão do seu projeto basta adicionar “(close #N)” para fechar um ticket ou “(refs #N)” para referenciá-lo e desta forma poder ver no futuro as alterações que foram feitas no projeto que estão relacionados a um determinado Ticket.