Terminal Friday: Patch e Diff

Duas das ferramentas essenciais no desenvolvimento de software são Remendo y Dif. Não é um mistério como eles funcionam, mas acho que este será um post interessante. 

Ambos são muito poderosos, e isso é como tocar a superfície, eles têm mais utilidades e outras funções. Basicamente, com essas duas ferramentas, podemos criar controle de versão,


Dif

Referimo-nos à comparação, ela compara um arquivo "original" com o "novo" e nos informa das diferenças que existem entre eles. Essa ferramenta também nos permite criar arquivos .patch que usamos para criar patches para nossos programas.


Remendo

É o comando com o qual literalmente "corrigimos" nosso arquivo original, adicionando e / ou removendo linhas de acordo com as instruções contidas no arquivo .patch


Há também vimdiff, que é uma ferramenta visual para aplicar patches sem a necessidade de um arquivo .patch, pois compara "original" e "novo" e no mesmo arquivo é possível editar linha por linha ou todo o documento. Não vou explicar isso, mas acho que merece uma menção.


Exemplo

Agora a diversão é. Exemplo!

Este é o caso, temos um ótimo roteiro que pergunta seu nome e sua idade, se você for maior de 18 anos ele diz que você pode votar, caso contrário, ele diz que você não pode votar.

original.sh

#! / bin / bash echo "Digite seu nome:" ler nome echo "Digite sua idade:" ler idade if [[18 -lt $ idade]] então echo "Olá $ name, você tem $ old e pode votar! " else echo "Olá $ name, você tem $ old e não pode votar ..." fi
Imagem do código no Vim

Imagem do código no Vim

Pronto, aqui está o script em execução:

tudo parece estar funcionando bem

tudo parece estar funcionando bem

Então, como bons usuários que somos, compartilhamos nosso script com um amigo :), mas recebemos uma mensagem dizendo que tem uma falha, que quando tem 18 anos diz que não pode votar quando deveria.

Erro lógico :(

Erro lógico 

Agora vamos começar a corrigir o pequeno erro e fazer algumas modificações ...

new.sh

#! / bin / bash maxAge = 18 echo "Digite seu nome:"; ler o nome echo "Escreva a sua idade:"; ler idade se [[$ maxAge -le $ idade]]; em seguida, echo "Olá $ name, você tem $ anos e pode votar!" else echo "Olá, $ name, você tem $ anos e não pode votar ..." fi exit 0
Novo código escrito em Vim

Novo código escrito em Vim

Suponha que o script seja muito pesado. Então, para não enviar o script inteiro novamente, criamos um .patch 

$ diff -u original.sh new.sh> patch.patch

E agora temos nosso patch. Aqui está uma visão sobre Vim:

Esta é a aparência das instruções para um .patch. Em branco as linhas que não foram modificadas, em azul as removidas e em laranja as adicionadas.

Esta é a aparência das instruções para um .patch. Em branco as linhas que não foram modificadas, em azul as removidas e em laranja as adicionadas.

E para aplicá-lo, simplesmente usamos o arquivo .patch no script a ser corrigido. Aqui é chamado originalAmigo.sh, que é uma cópia exata do script original.sh

Script de amigo

Script de amigo

$ patch originalFriend.sh <patch.patch

E isso nos deixa nosso arquivo originalAmigo.sh Assim:

Script de amigo após aplicar patch

Script de amigo após aplicar patch

Como você pode ver, é muito fácil obter os diffs e aplicar os patches. É tudo meu.

Saudações pessoal, leremos na próxima sexta-feira.


Adicionar como fonte preferencial no Google