
Fundo
Estou tentando implementar vários ganchos de commit para o Subversion. Pesquisei bastante para tentar fazer com que um gancho de teste simples funcionasse, mas não tive sorte.
Para referência, examinei, segui e tentei combinar métodos dos seguintes links:
1.Manual do Subversion para configuração de diretório
2.Manual do Tortoisevn para scripts de gancho do lado do servidor
3.Uma explicação sobre ganchos do lado do servidor que contém um link para o manual do Subversion
4.O tutorial wordaligned para ganchos de pré-confirmação
5.Uma resposta serverfault para problemas com commit-hooks
Há também vários outros sites que mencionei e usei, mas ainda não consigo fazer os ganchos de commit funcionarem.
Meu ambiente
Minha máquina está executando RHEL6 (Cent OS).
O subversion está localizado em uma máquina remota que não consigo acessar diretamente sem a permissão do meu supervisor.
A máquina remota está executando o Subversion 1.6.
Esta é a estrutura atual do meu repositório:
test-for-svn-hooks
|-branches
|-hooks
| +-pre-commit
|-tags
+-trunk
O arquivo pré-confirmado temporariamente tem permissões definidas como 777
. Todos os diretórios têm suas permissões definidas como 775
.
Este é o script de exemplo que criei para testar o gancho de commit:
#!/usr/bin/env bash
echo "THOU SHALL NOT PASS" 1>&2
exit 1
Eu verifiquei e testei tudo o que pude para ter certeza de que meu gancho de pré-confirmação está funcionando corretamente. Não sei o que mais preciso verificar para ter certeza de que funciona. Posso confirmar o que quiser e não recebo nenhuma mensagem na minha tela.
Questões
1. Há algo que esqueci ou esqueci na implementação de ganchos?
2. Se eu implementar um gancho desta forma, terei que me preocupar em implementar o mesmo gancho novamente no Tortoisesvn?
Qualquer feedback e/ou sugestão será muito apreciado.
Responder1
- Há algo que perdi ou esqueci na implementação de ganchos?
Não use a permissão 777. Às vezes, isso pode ser contraproducente. Algumas ferramentas podem não funcionar com essas permissões suspeitas. No seu caso, é improvável que esse seja o problema, porque funciona para mim com essa configuração. Mas simplesmente não faça isso. Mude para 755.
Outra verificação de integridade a ser feita é executar o script de gancho diretamente no servidor:
/path/to/test-for-svn-hooks/hooks/pre-commit
Quando seu script tem conteúdo mais significativo, você também deve testar com parâmetros adequados, por exemplo:
/path/to/test-for-svn-hooks/hooks/pre-commit /path/to/test-for-svn-hooks TXN
A seguir, teste-o utilizando um checkout no próprio servidor, por exemplo:
svn co /path/to/test-for-svn-hooks /tmp/test1
cd /tmp/test1
date > date.txt
svn add date.txt
svn ci -m 'added some junk'
Com base no que você escreveu em sua postagem, essas etapas devem funcionar. Não conheço os detalhes das condições sob as quais seus testes estão falhando. Se você conseguir chegar a este ponto, talvez veja o motivo da falha nos testes.
- Se eu implementar um gancho desta forma, terei que me preocupar em implementar o mesmo gancho novamente no Tortoisesvn?
Não. Os ganchos são definidos no lado do servidor. Não há necessidade de fazer nada do lado do cliente. Todos os clientes estarão sujeitos às regras definidas no gancho de pré-comprometimento.