19 de maio de 2009

diff e patch remoto

Uma coisa bem chata de resolver é a comparação entre arquivos de configuração entre uma máquina local e remota, ou ainda, entre duas remotas. A grande dificuldade consiste na falta de identificação de quais linhas são diferentes realmente e quais são configurações locais, isto é, aplicadas àquele servidor em especial.

Afortunados como eu ( :D ) , que tem dois monitores, que podem colocar dois terminais lado a lado e compará-los também acabam encontrando dificuldade quando falamos de 100 ou mais linhas, ou mesmo quando a ordem entre os parâmetros dentro do arquivo foram alteradas.

Uma forma bem interessante de resolver o problema seria recorrer a cópias dos arquivos para máquina local e compará-los através do $diff. Mas, eu encontrei uma ainda mais completa e direta, que consiste na aplicação de três comandos para gerar um patch, que pode ser facilmente aplicado sobre o arquivo que estamos configurando.

O comando seria:
$ssh [user]@[host] cat [arquivo alvo remoto] | diff [arquivo alvo local] - > [arquivo].patch

Explicando o comando: Fazemos uma conexão ($ssh), damos um echo ($cat) do arquivo remoto. Aqui vale uma explicação: nosso echo fica armazenado para ser aplicado a seguir, quando usaremos o $-, repassando-o. Prosseguindo: continuamos o comando através de um pipe-line ($|), aplicamos o programa de comparação ($diff) no arquivo local (agora sim, nosso $-) e, finalmente, gravamos esta comparação em um arquivo, ($> arquivo.patch).

Com este patch em mãos, podemos simplesmente utilizar o comando $patch [arquivo a ser modificado] [arquivo de patch] para aplicá-lo no arquivo local que queremos tornar igual ao arquivo remoto. Vale uma observação aqui também: devemos revisar o arquivo, seja ele na forma de patch, antes de aplicá-lo, seja depois, o arquivo local corrigido, pois as configurações locais devem condizer com nossos parâmetros locais.

Um comentário:

Battisti disse...

tem também o vimdiff que junta o vim com o diff, uso muito isso
http://battisti.wordpress.com/2008/11/22/vimdiff-uma-ferramentas-para-deploy-de-aplicacoes-php/