você está aqui: Home  → Arquivo de Mensagens

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

 

 

Opinião dos Leitores

Marz
29 Jun 2011, 11:23
Hmm, acho que o git é mais interessante, pois vc cria repositórios (ná realidade um banco de dados) localmente, fácil de levar num pendrive.

Faço isto com o meu etc e demais projetos em nas linguagens que trabalho, inclusive com documentos, imagens, binários, etc.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script