quarta-feira, 14 de julho de 2010

Usando o Mercurial no Gedit

Olá a todos...

Sei que acabei deixando o blog um pouco de lado, apesar de ter prometido não deixá-lo parado. Bom, meu motivo foi a faculdade, e sim, o temível mas prazeroso TCC (prazeroso depois de pronto, é claro..=])

Mas vamos ao que interessa...
Quem utiliza o Mercurial como controle de versão (ou outro, como Git por exemplo) para seus projetos sabe o quanto é "chato" ter que alternar para o console a cada novo commit, adição de arquivos ou visualização do log.
Como trabalho com o editor Gedit, pesquisei até achar uma forma de suprir a necessidade de facilitar o uso do Mercurial com esse maravilhoso editor.
Enfim achei algo que me ajudasse, o plugin 'Ferramentas Externas', presente no Gedit.
Com esse plugin é possível criar funcionalidades através de linguagens de script. Não sei ao certo quais linguagens ele suporta, mas testei com Shell Script e Python e occoreu tudo bem.


Vamos a prática.

Lembrando que estou trabalhando com Ubuntu 10.04, então pode haver a necessidade de alterar alguma coisa para sua plataforma ou distro.

Não vou me ater a como instalar e configurar o Mercurial, então, estude ele antes, caso não o conheça.
Certifique que o repositório Mercurial esteja iniciado antes de utilizar os recursos desse post.

Para utilizar o plugin, é preciso ativá-lo. Para isso vá em Editar  > Preferências > Plugins. Ative o plugin Ferramentas Externas.

Adicionando o arquivo ao repositório

 

Vamos criar a função de adicionar um arquivo do Mercurial (hg add ). Essa função adiciona ao repositório somente o arquivo que está sendo editado, então, para adicionar todos de uma vez, utilize o bom e velho terminal ou abra cada arquivo e execute a tarefa.

Vá em Ferramentas > Gerenciar Ferramentas Externas. Clique no botão adicionar e dê um nome (sugiro hgAdd). No painel ao lado você substitua o texto pelo seguinte:
#!/bin/sh

DOCPATH=$GEDIT_CURRENT_DOCUMENT_PATH

hg add -v "${DOCPATH}"

Logo abaixo tem algumas opções, não há necessidade de alterar, mas se quiser, recomendo colocar um atalho para executar a função e a opção Saída colocar o valor Mostrar no Painel Inferior. Feche a janela.

A variavel GEDIT_CURRENT_DOCUMET_PATH é uma variável do plugin, que determina o path do arquivo.

Para testar crie um arquivo no diretório do repositório e edite com o Gedit, salve e pressione as teclas de atalho (caso tenha configurado) ou vá até Ferramentas > Ferramentas Externas > nome. Pronto, o arquivo em questão foi adicionado ao repositório.

Efetuando o commit


A seguinte funcionalidade efetua o commit (hg commit -m ) no repositório referente ao arquivo que está sendo editado.

Adicione outra funcionalidade em Ferramentas > Gerenciar Ferramentas Externas. De um nome para ela ( sugiro hgCommit ) e escreva o seguinte código no painel ao lado:
#!/bin/sh

DOCPATH=$GEDIT_CURRENT_DOCUMENT_DIR #define o path do documento

#define o comentário do parametro -m.
COMENTARIO=`zenity --entry --title="Mercurial Commit" \
--text="Entre com um comentário e pressione OK para concluir o commit"`

ESCOLHA=`echo $?` #verifica se deu OK

#caso OK, executa o commit do mercurial
if [ "${ESCOLHA}" -eq 0 ]
then
 #caso o comentário for em branco, adiciona um comentário
 if [ -z "${COMENTARIO}" ]
 then
  COMENTARIO="Commit em branco - `date`"
 fi
 hg commit -v -m "${COMENTARIO}" "${DOCPATH}"
fi

As configurações podem ser iguais ao da funcionalidade anterior, exceto o atalho, que deverá ser outro.

Para testar, basta editar o arquivo, adicionar ele ao repositório (caso não esteja) e pressionar as teclas do atalho ou ir em Ferramentas > Ferramentas Externas >nome

Ver o log


Para visualizar o log (hg log), basta adicionar uma nova funcionalidade em Ferramentas > Gerenciar Ferramentas Extras. Adicione o seguinte código:

#!/bin/sh

DOCPATH=$GEDIT_CURRENT_DOCUMENT_DIR #define o path do documento

#joga em uma janela do zenity o log do repositório do arquivo
hg log "${DOCPATH}" | zenity --text-info --width 530 --height 400

Nas configurações idem a funcionalidade citadas acima.


Estude um pouco de Shell Scrip, Python, Zenity (para interagir seus scripts) e o plugin External Tools. Você pode elaborar ferramentas para tornar o Gedit mais poderoso e fácil para trabalhar.

Espero que tenha ajudado, qualquer dúvida ou sugestão, é só postar nos comentários.

Abraços.