Customizando o Subversion parte 1

O Subversion é um dos mais conhecidos sistemas de controle de versão do mercado. É uma solução open source que pode ser utilizada de forma viável no ambiente corporativo. O Maior problema do subversion é quanto a adminsitração por que as ferramentas boas de administração são pagas, não usando essas ferramentas você tem que administra-lo via linha de comando. Mas isso não é o fim do mundo.

Eu sinto fala de processamento da working copy do SVN, o Clear Case de Rational/IBM já tem essa feature de maneira bem inteligente e eficiente, quem sabe nas próximas versões eles colocam.

Existem diversos clientes visuais para o Subversion, o melhor deles que é o Tortoise não existe para linux, somente para Windos. O que é uma pena pois esse é o melhor client e no Linux não existe nenhum que seja bom perto do Tortoise.

O Tortoise é o nosso primeiro ponto de customização você pode adicionar scripts customizados que realizam determinados processamentos no Tortoise mas isso não é aconselhado por que o script teria que ser configurado máquina a máquina de quem usa o Tortoise.



Qual o melhor ponto de customização de Scripts?

Do lado do servidor, por que lá você coloca no repositório e pronto, todos os clientes estariam usando esse script. Esse script pode ser escrito em diversas linguagens como por exemplo Java, Bash, Python e outras.

Podemos manipular a API do Subversion através dessas e outras linguagens que eu mencionei, essa API é conhecida como Binding. Você só precisa achar um binding do Subversion para a sua linguagem preferida.

Para criar scripts para o SVN acho que Python é uma boa solução. Mas antes de falarmos dos scripts propriamente vamos ver como o SVN armazena esses scripts e que pontos de customização existem a nossa disposição.

Nota: Um binding para Python é o Pysvn. Porem esse cara é recomendado para Windos, ele não funciona bem no linux, para isso você deve usar os bindings do próprios svn na compilação do mesmo.

Criando um repositório

Para criar um repositório no SVN basta usar o comando a baixo.

svnadmin create nomeDoNovoRepositorio

A localização dos Scripts (hooks)

Para o Subversion esses scripts são conhecidos como hooks, se você olha para um repositório do Subversion 1.5.x por exemplo pode notar essa estrutura de pastas:
  • conf: Configurações do repositório.
  • db: Banco de dados do SVN.
  • hooks: Onde você coloca os seus scripts.
  • locks: Controle interno de locks do SVN.
  • format: Layout do repositório.
OK. Mas para que eu criaria um Script?

Por vários motivos. Que variam muito dependendo da sua utilização do Subverion, mas posso dar alguns exemplos como sendo:
  • Controle de commits
  • Notificação de commits
  • Noticação de arquivos removidos/tagueados/mergiados
  • Realização de estatísticas
  • Controle de permissões de acesso a arquivos
  • backup
Entre tantas outras aplicações. No primeiro exemplo que seria o controle de comits, seria um script muito simples e muito util. Por que? Porque o svn por default deixa comentários em branco e pode ser que você não deseje isso.

Comentários em Branco

Essa de facto é uma péssima prática de gerencia de configurações. Por que na hora de fazer um merge ou mover arquivos não se sabe o que aconteceu no arquivo, claro que você pode usar o histórico. Mas o comentários facilitam horrores. Então você pode criar um script para não deixar passar comentários em branco.

Pontos de customização

Transando um paralelo com banco de dados esses scripts hooks seriam como triggers. Então vamos aos hooks e quando eles são disparados.
  • start-commit
  • pre-commit
  • post-commit
  • pre-lock
  • post-lock
  • pre-unlock
  • post-unlock
  • pre-rev-prop-change
  • post-rev-prop-change
Acho que os hooks despensam explicações, mas vou falar por cima. Basicamente aquio temos ter tipos de hooks os de antes depois e no inicio. E temos tres operações distintas que seriam o commit o lock e a mudanças de propriedades. Para cada uma temos esses tipos mas com nomes diferentes.

Bom por hoje eras isso na seguencia vou mostrar como ficariam esses scripts em Python. Até a próxima.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java