Estou iniciando um novo projeto e aproveitei para mudar do CVS para o Subversion.Â
Uma das coisas que achei interessante é o esquema de “hooks“. É um conceito parecido com “triggers” de bancos de dados. Você pode programar alguns scripts para serem executados em momentos especÃficos do ciclo gerenciado pelo SVN. As opções são:
post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl
Os nomes são auto-explicativos. Por exemplo, o script post-lock vai ser executado sempre após algum usuário ter feito o lock de um arquivo.
Estes arquivos estão armazenados no diretório hooks do repositório do projeto.
O que eu fiz foi alterar o post-commit.tmpl
É preciso remover a extensão do nome e dar permissão de execução no arquivo, então:
cp post-commit.tmpl post-commit
chmod +x post-commit
O conteúdo do arquivo ficou assim:
REPOS="$1"
REV="$2"
PROD="/var/www/html"
#pega todas as alteracoes
svnlook changed $REPOS --revision $REV >> /tmp/lixo_$REV
#pega cada alteracao e salva
for i in `cat /tmp/lixo_$REV|cut -c 5-1024` ; do
  svnlook cat $REPOS $i > $PROD/$i
done
#apagar arquivo
rm /tmp/lixo_$REV
Desta forma cada vez que um programador faz o commit do fonte ele é automaticamente salvo no htdocs, onde fica acessÃvel para a equipe de testes.Â
Lógico que esse script pode ser melhorado e isso está sendo executado em um servidor de desenvolvimento e não o de produção. Além disso eu comecei a usar o SVN somente agora, por isso, se alguém encontrar um problema ou erro na lógica me avisem
ola!!
teria como vc me explicar como obrigar em td commit dado, ter obrigatoriamente uma mensagem?
Boa pergunta!
Não sei
Mas vou pesquisar
legal,
eu estou usando o svn também e estava dando deploy no braço. Agora ficou mais fácil.
Legal.. mas comigo não deu certo.
simplesmente quando faço o commit, não atualiza no htdocs.
Olá Amigo,
Andei lendo muito sobre hooks e a forma que voce demonstra foi a que mais cheguei perto.
Coloquei ela desta forma:
PROD=”/teste”
#pega todas as alteracoes
svnlook changed $REPOS –revision $REV >> /tmp/lixo_$REV
#pega cada alteracao e salva
for i in `cat /tmp/lixo_$REV|cut -c 5-1024` ; do
svnlook cat $REPOS $i > $PROD/$i
done
#apagar arquivo
rm /tmp/lixo_$REV
quando executo o comando para debugar o hook, recebo o seguinte retorno:
administrador@angra:/srv/svn/avanz/hooks$ sudo env – ./post-commit /srv/svn/avanz/
svnlook: missing argument: –revision
Type ‘svnlook help’ for usage.
Voce pode me dar uma ajudinha? Valeu aih brother