Esta é a segunda edição deste tutorial, gostaria de acrescentar algumas coisas que os leitores tiveram dúvidas e corrigir outras, estou criando este tutorial porque acabei de reinstalar o meu sistema, agora Ubuntu 8.04 LTS, e pense numa trabalheira reinstalar tudo. :-D
Como uso o Ubuntu, irei usar o aptitude para instalar meus pacotes, ao menos para a maioria dos pacotes, a vantagem é ter o log de toda instalação e desinstalação dos pacotes em /var/log/aptitude*

Dica útil, desligue nas preferências do aptitude a instalação automática dos pacotes recomendados, geralmente eles são inúteis. Read more

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

Este será um artigo bem curto, não vou discutir qual é a melhor forma de fazer backup do Subversion, apenas vou mostrar como eu faço! Juntamente com o Subversion eu também faço backup da pasta do Trac.

No meu computador todos os projetos do Subversion encontram-se em “/var/lib/svn/” e os projetos do Trac em “/var/lib/trac/”, portanto fica simples fazer o backup, que no meu caso é para minha pendrive.

O script que eu utilizo é:

#!/bin/bash
PENDIR=”/media/MY FILES/”
BKPDIR=$PENDIR”backup/”
BASEDIR=”/var/lib/”
SVNPATH=$BASEDIR”svn/”
TRACPATH=$BASEDIR”trac/”
SVNCMD=”svnadmin -q”
TARCMD=”tar -czPf”
echo -n -e “\n *** Iniciando o procedimento de backup *** \n\n”
for project in projeto1 projeto2 projeto3; do
echo -n -e ” * Copiando subversion do projeto $project para $BKPDIR…”
$SVNCMD dump “$SVNPATH$project” > “$BKPDIR$project”".svndump”
echo -n -e ” OK!\n”
echo -n -e ” * Copiando trac do projeto $project para $BKPDIR…”
$TARCMD “$BKPDIR$project”"-trac.tar.gz” “$TRACPATH$project”
echo -n -e ” OK!\n”
done
echo -n -e “\n *** Finalizando backup *** \n\n”

Ou seja, o procedimento é simplesmente montar a pendrive na USB, e executar este script, caso você tenha algum dispositivo permanente de backup poderá agendar esse script no cron.

Se você está procurando apenas os comandos para backup use

$ svnadmin dump /var/lib/svn/projeto1 > projeto1.svndump

Para backup do Trac eu prefiro fazer do diretório completo, pois já vem com meus plugins e outras personalizações.

$ tar -czPf projeto1-trac.tar.gz /var/lib/trac/projeto1

Restaurando o backup

Para restaurar o backup do Subversion exige-se duas etapas, a primeira é criar o projeto vazio e depois carregar o dump salvo anteriormente.

$ sudo svnadmin create projeto1

$ sudo svnadmin load projeto1 < projeto1.svndump

Para restaurar o Trac basta descompactar o arquivo na pasta do Trac, que no meu caso é “/var/lib/trac/” e após isso seguir os passos de configuração ditos no meu outro artigo “Instalando o Trac e o Subversion em 12 passos no Ubuntu 7.04 (Feisty Fawn)

Pronto! Seu computador está pronto para o trabalho novamente!

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.

Sempre tenho dificuldades para lembrar como fiz a configuração do meu computador, e sempre que algo dá errado e eu tenho que formatá-lo tenho que buscar na internet como configurá-lo novamente, tentando lembrar como o personalizei e essas coisas, enfim, agora que eu tenho um blog vou publicar a documentação que eu uso para configurar meu computador e espero que seja útil para mais alguém.

Como uso o Ubuntu, irei usar o aptitude para instalar meus pacotes, ao menos para a maioria dos pacotes, a vantagem é ter o log de toda instalação e desinstalação dos pacotes em /var/log/aptitude*

1. Vou instalar o que geralmente instalo assim que termino a instalação do Ubuntu, todo computador de desenvolvedor tem que ter.

$ sudo aptitude install build-essential python-dev python-profiler python-setuptools

2. Instalar os binários do Subversion, neste pacotes encontram-se o cliente e o servidor também.

$ sudo aptitude install subversion python-subversion

3. Agora os binários do Trac com os módulos Python relacionados

$ sudo aptitude install trac python-docutils python-clearsilver python-pysqlite2 python-roman

4. Por fim instalar o Apache com os módulos necessários para publicar o serviço Webdav do Subversion e para hospedar o Trac usando mod_python (mais rápido do que o cgi)

$ sudo aptitude install apache2 apache2-utils apache2-mpm-worker apache2.2-common libapache2-mod-python libapache2-svn

5. Criar as pastas onde serão colocados os projetos

$ sudo mkdir -p /var/lib/svn/

$ sudo mkdir -p /var/lib/trac/

6. Criar o projeto Subversion

$ cd /var/lib/svn/

$ sudo svnadmin create +projeto+

6.1 Caso esteja restaurando um backup carregar o backup após criar o projeto

$ svnadmin load +projeto+ < +projeto+.svndump

7. Esta configuração é para o Apache poder ler no diretório

$ sudo chgrp -R www-data +projeto+

$ sudo chown -R g+w +projeto+

8. Criar o projeto Trac

$ cd /var/lib/trac/

$ sudo trac-admin +projeto+ initenv

8.1 Caso esteja restaurando um backup pular o passo anterior e executar

$ tar -zxvf +projeto+.tar.gz -C /var/lib/trac/

9. Esta configuração é para o Apache poder ler no diretório do Trac

$ sudo chgrp -R www-data +projeto+

$ sudo chown -R g+w +projeto+

10. Configurar o apache para servir os sites do Subversion, via Webdav e do Trac via mod_python

$ cd /etc/apache2/sites-available/

$ sudo vim svn

— code —
NameVirtualHost *:80

<VirtualHost *:80>
ServerName svn.home.local
ServerAlias svn
ServerAdmin allan.garcia@gmail.com
ErrorLog /var/log/apache2/error_svn_log
CustomLog /var/log/apache2/access_svn_log common

<Location /+projeto+>
DAV svn
SVNPath /var/lib/svn/+projeto+
AuthType Basic
AuthName “+projeto+ Subversion Repository”
AuthUserFile /var/lib/trac/+projeto+/.passwd
Require valid-user
</Location>

</VirtualHost>
— code —

$ sudo vim trac

— code —
<VirtualHost *:80>
ServerName trac.home.local
ServerAlias trac
ServerAdmin allan.garcia@gmail.com
ErrorLog /var/log/apache2/error_trac_log
CustomLog /var/log/apache2/access_trac_log common

<Location /+projeto+>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/lib/trac/+projeto+
PythonOption TracUriRoot /+projeto+
AuthType Basic
AuthName “+projeto+ Trac”
AuthUserFile /var/lib/trac/+projeto+/.passwd
Require valid-user
</Location>

</VirtualHost>
— code —

$ sudo a2ensite svn

$ sudo a2ensite trac

Criar o arquivo htpasswd para o projeto

$ cd /var/lib/trac/+projeto+/

$ sudo htpasswd -c .passwd +usuario+

11. Configurar o arquivo hosts para responder para o localhost os nomes configurados no Apache

$ sudo vim /etc/hosts

— code —
127.0.0.1 trac.home.local trac svn.home.local svn
— code —

12. Reiniciar e testar

$ sudo /etc/init.d/apache2 reload

acessar http://svn/+projeto+ para o subversion
acessar http://trac/+projeto+ para o trac