Customizando Subversion parte 2
Em um post anterior escrevi sobre a possibilidade de customizar o comportamento do sistema de controle de versão open source chamado Subversion ou popularmente chamado de SVN.
Neste post vou mostrar através de um Script Python como é possível modificar o comportamento do Subversion de forma que não deixe o usuário realizar um commit sem um comentário.
A Importância dos Comentários nos Commits
Além de uma ótima prática de gerencia de configurações, utilizar comentários no commit do svn nos ajuda na hora de realizar merges, na hora de acompanhar mudanças e também quando você está procurando um versão antiga de um artefato.
Você irá precisar de um Binding
A API do Subversion é para alguma linguagem como Java, Python, PHP, etc é chamada de Binding. Então precisamos de um binding para Python. Vamos utilizar o binding do próprio site do subversion chamado de pysvn.
Você precisa instalar o Python e o Subversion e bem como o pysvn. Uma vez tudo isso instalando vamos ao script, esse script é construindo utilizando os recursos de expressões regulares do Python. Sinta-se livre a vontade para modifica-lo para as suas necessidades.
Vamos utilizar o hook de pre-commit logo se esse script retornar 1 o svn não irá fazer o commit, nesse caso é justamente o que queremos pois não queremos commitar sem comentários.
OBS: Se você for usar esse script hook no windows, você precisa criar um script .bat para chamar o seu script python, isso é necessário por que o svn do windows só executa hooks com as extensões bat e exe.
Você precisa colocar esse script na pasta hooks do repositório do seu SVN, para maiores detalhes consulte o post anterior sobre o assunto. Espero que tenham gostado, na seqüencia pretendo postar mais scripts.
Abraços.
Neste post vou mostrar através de um Script Python como é possível modificar o comportamento do Subversion de forma que não deixe o usuário realizar um commit sem um comentário.
A Importância dos Comentários nos Commits
Além de uma ótima prática de gerencia de configurações, utilizar comentários no commit do svn nos ajuda na hora de realizar merges, na hora de acompanhar mudanças e também quando você está procurando um versão antiga de um artefato.
Você irá precisar de um Binding
A API do Subversion é para alguma linguagem como Java, Python, PHP, etc é chamada de Binding. Então precisamos de um binding para Python. Vamos utilizar o binding do próprio site do subversion chamado de pysvn.
Você precisa instalar o Python e o Subversion e bem como o pysvn. Uma vez tudo isso instalando vamos ao script, esse script é construindo utilizando os recursos de expressões regulares do Python. Sinta-se livre a vontade para modifica-lo para as suas necessidades.
Vamos utilizar o hook de pre-commit logo se esse script retornar 1 o svn não irá fazer o commit, nesse caso é justamente o que queremos pois não queremos commitar sem comentários.
# # pre-commit.py # # @Autor Diego Pacheco # @since 26/04/2009 # @Version 1.0 # # Codigo Python que utiliza o pysvn para manipular o controle de versão afim de # nao deixar passar commit sem comentários apropriados. Sinta-se a vontade para modifica-lo. # import os import os.path import sys from datetime import date import re import svn import svn.fs import svn.repos import svn.core # # Método que loga as exception em arquivo de log de erros. # @Parameter e eh a exception que foi levantada # def _handleException(e): try: f = open('C:/log.pysvn..commits.txt', 'w+') now = date.today() dataFormated = now.strftime("%m-%d-%Y") f.write("[" + dataFormated + "] " + str(e)) f.close() _trace(str(e),"FATAL") except: print sys.exc_info() # # Método que valida se a mensagem de commit eh apropriada. # # @Parameter commitMessage eh a mensagem do commit # @Return 0 para mensagem OK. 1 Para mensagem impróprias # def _validateCommitComment(commitMessage=None): mat = None if commitMessage: try: mat = re.search('[\w]{5}[_0-9]?', commitMessage) print str(mat.group(0)) except AttributeError: _handleException("Você não digitou um comentário valido. Digite um comentário apropriado!") return 1 else: _handleException("Você não pode commitar um arquivo em branco. Digite um comentário apropriado!") return 1 # # Metodo Main # def main(argv): try: txn_name = None repos_path = None log_message = None txn = None fs = None # Obtem a messagem de commit que o usuario digitou repos_path = svn.core.svn_path_canonicalize(argv[1]) fs = svn.repos.svn_repos_fs(svn.repos.svn_repos_open(repos_path)) txn_name = argv[2] txn = svn.fs.svn_fs_open_txn(fs, txn_name) log_message = svn.fs.svn_fs_txn_prop(txn, "svn:log") return _validateCommitComment(log_message) except: _handleException(sys.exc_info()) return 1 # # Execucao do metodo Main. # if __name__ == '__main__': sys.exit(main(sys.argv))
OBS: Se você for usar esse script hook no windows, você precisa criar um script .bat para chamar o seu script python, isso é necessário por que o svn do windows só executa hooks com as extensões bat e exe.
Você precisa colocar esse script na pasta hooks do repositório do seu SVN, para maiores detalhes consulte o post anterior sobre o assunto. Espero que tenham gostado, na seqüencia pretendo postar mais scripts.
Abraços.