você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Controle de versões para shell scripts

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 29 de junho de 2011

O site Dicas-L e todos os outros sites que mantenho (Contando Histórias, Aprendendo Inglês, Inglês Instrumental e Edulinks), são todos feitos com shell scripts e o genial txt2tags, escrito pelo não menos genial Aurélio Jargas.

Para evitar confusões, eu uso um software para controle de versões, o RCS. Além do controle de versões, é importante saber o que mudou de uma versão para outra. Com o RCS isto pode ser feito de uma forma muito simples, com a inclusão, no código do programa, da seguinte linha:

# $Log$

A variável $Log será expandida exibindo, dentro do código, todo o histórico de revisões do programa.

Exemplo:

#!/bin/bash

# $Log$

while read arquivo
do
  echo $arquivo
done < arquivos.txt

Vamos simular alguns passos. Para usar o RCS, precisamos criar um diretório chamado RCS dentro do diretório onde está o nosso código:

mkdir RCS

Em seguida, colocamos o código de nosso programa ou shell script sob o controle do RCS:

ci shell.sh
RCS/shell.sh,v  <--  shell.sh
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> Programa para demonstrar o uso do RCS
>> .
initial revision: 1.1
done

Isto feito, podemos começar a trabalhar com o programa. Para isto, usamos o comando co, abreviação para check out.

% co -l shell.sh 
RCS/shell.sh,v  -->  shell.sh
revision 1.1 (locked)
done

Podemos proceder agora fazendo as alterações necessárias no programa. A opção -l significa lock, ou seja, a edição do programa fica bloqueada a outros usuários. Ao final da edição, colocamos novamente o programa sob o controle do RCS, registrando o que foi feito:

% ci -u shell.sh
RCS/shell.sh,v  <--  shell.sh
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> Inclusão do laço de leitura do nome dos arquivos
>> .
done

Precisamos agora extrair uma cópia do programa para uso, mas protegida contra gravação:

% co shell.sh
RCS/shell.sh,v  -->  shell.sh
revision 1.2
done

Vamos agora examinar o conteúdo do arquivo:

% cat shell.sh
#!/bin/bash

# $Log: shell.sh,v $
# Revision 1.2  2011/06/28 19:03:14  queiroz
# Inclusão do laço de leitura do nome dos arquivos
#

while read arquivo
do
  echo $arquivo
done < arquivos.txt

Podemos ver que o comentário inserido aparece no corpo do programa. A variável $Log foi expandida para indicar o nome do arquivo (shell.sh,v), a versão (Revision 1.2), data e hora da modificação (2011/06/28 19:03:14) e o nome do autor das mudanças (queiroz). Finalmente, temos o comentário descrevendo as mudanças realizadas (Inclusão do laço de leitura do nome dos arquivos).

Existem outras variáveis que podem ser incluídas no código, como por exemplo $Author$, $Date$, e várias outras. A lista completa pode ser consultada na documentação (man ident).

Existem soluções mais sofisticadas para controle de versões, mas para sistemas pequenos, como o conjunto de scripts da Dicas-L, funciona super bem, permite saber o que cada versão faz, e impede a edição de forma inadequada dos arquivos.

Para saber mais sobre RCS, consulte o documento "The RCS MINI-HOWTO".



Veja a relação completa dos artigos de Rubens Queiroz de Almeida