Depois de obter o código fonte, modifique-o, compile-o e teste-o, você pode querer receber suas mudanças revisadas e checadas]. Em ordem de fazer isto, você precisa criar um arquivo listando as mudanças que você fez, chamado patch ou diff file. Você pode gerá-lo usando o comando cvs diff.
Criando um diff de um arquivo único
Em ordem para criar um diff de um arquivo local único contra o arquivo atual no repositório, use:
$ cvs diff -u8p FILENAME
Isto cria um diff no então chamado formato 'unified' (-u
), com 8 linhas de contexto. O diff é impresso para stdout por padrão. Para redirecionar a saída para um arquivo, use algo como:
$ cvs diff -u8p FILENAME > OUT_FILE
Criando um diff para arquivos múltiplos
Se, ao invés de usar um arquivo regular para FILENAME, você providenciar um diretório, então este diretório assim como todos os subdiretórios serão buscados recursivamente. Por exemplo
$ cvs diff -u8p . > OUT_FILE
comparará todos os arquivos no diretório corrente e todos os seus subdiretórios contra as versões no repositório, e escreverá as diffs combinadas e unificadas para um arquivo chamado OUT_FILE, usando 8 linhas de contexto.
Deve haver contexto suficiente no patch para que seja endendido sem abrir o código fonte. A linha-guia padrão é usar 8 linhas de contexto; se for colocado mais contexto, é necessário fazer o patch entendível, substitua 8 por um número maior. Também note que a maior quantidade de contexto que você inclui, aumenta a chance de permitir também aplicar o patch a um arquivo que difere pesadamente do código original contra o que o diff foi preparado.
Incluindo novos arquivo em um patch
Para incluir um novo arquivo em seu patch use a opção -N
:
$ cvs diff -u8pN . > OUT_FILE
Um problema comum aqui é que cvs diff não incluirá os novos arquivos que não foram cvs added (cvs adicionado), e cvs requer acesso de escrita ao repositório.
A solução é usar a utilidade cvsdo , que edita CVS/Entries
para fazer o cvs pensar que o arquivo foi adicionado ao repositório:
$ cvsdo add NEWFILE $ cvs diff -u8pN NEWFILE > OUT_FILE
Note que este truque não trabalhará para novos diretórios; para isto, cvs add
atualmente têm de modificar o repositório imediatamente, que requere acesso à escrita