Criando e aplicando um patch

Não vou entrar em muitos detalhes nesse artigo, mas vou dar uma explicação rápida de como funcionam os programas diff e seu companheiro, o patch. O primeiro cria o patch e o segundo o aplica em algum arquivo.

“Mas WTF é um patch? E por que eu iria querer usá-lo?” Um patch é um arquivo que diz que partes de um outro arquivo devem ser modificadas*. Ele é bastante útil, por exemplo, quando você modificou um arquivo de 2000 linhas e quer dizer para o desenvolvedor do aplicativo que acha que essa sua versão é melhor. A vantagem é que o patch é bem menor que o arquivo original, e isso permite que o desenvolvedor veja com maior facilidade o que foi alterado e o que não foi.

Agora chega de papo e vamos ao que interessa. Vamos criar um arquivo bem simples para aplicar um patch:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  printf("hello world!\n");

  return(0);
}

Mas digamos que você mudou de idéia, e quer fazer um programa mais filosófico. Então você copia hello.c para tobe.c e edita a linha do printf() para ficar assim:

  printf("to be or not to be?\n");

O patch é criado rodando diff arquivo_original arquivo_modificado. O output é algo como:

6c6
<   printf("hello world!\n");
---
>   printf("to be or not to be?\n");

mas como o que queremos é um arquivo com esse patch, temos que redirecionar essa saída para um arquivo, rodando algo como diff hello.c tobe.c > tobe.patch

Agora para aplicar o patch, rodamos patch arquivo_original arquivo_de_patch . No nosso caso, rodaremos: patch hello.c tobe.patch .

Agora se você abrir o arquivo hello.c verá que ele é igual ao arquivo tobe.c . Basicamente, é isso.

*Ao reler isso, imaginei um patch que altera um arquivo, que é um outro patch. Sim, isso é possível, mas fico imaginando o quanto útil isso seria.

Publicidade

Uma resposta para “Criando e aplicando um patch

  1. Pingback: Notas sobre optimizações II: O código « Aletéia

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: