Creare Patch per le Applicazioni Linux

Se capita di modificare la nostra applicazione è necessario rilevare quali cambiamenti sono stati introdotti, evitando così di distribuire l’intero progetto. Per rendere agevole le ricerche delle differenze tra i file sorgenti esiste il comando Linux diff che si occupa di segnalare le incongruenze tra i due file passati per argomento. Facciamo un esempio molto semplice, scriviamo il file scrivo.c per stampare una scritta:

#include “stdio.h”
int main(int argc, char* argv[])
{
   printf(“Buongiorno al mio amico numero 1\n”);
}

mettiamo che dobbiamo fare dei cambiamenti e rinominiamo il vecchio file in scrivo.old ed aggiorniamo il file scrivo.c in:

#include “stdio.h”
int main(int argc, char* argv[])
{
   int i;
   for (i = 0; i < 8; i++)
       printf(“Buongiorno al mio amico numero %d\n”, i);
}

Il comando diff consente di vedere le differenze tra due file, in particolare tra le opzioni troviamo:

  • -b non indica come cambiamenti gli inserimenti di spazi bianchi
  • -B ignora le linee vuote non segnalandole come cambiamenti
  • -i ignora le differenze tra caratteri maiuscoli e minuscoli
  • -p segnala le funzioni C in cui è avvenuto qualche cambiamento
  • -c o C utilizza il formato contesto come output delle differenze. Se specificato verranno inserite tante righe prima e dopo il blocco delle differenze
  • -u o -U utilizza il formato unificato. Se specificato verranno inserite tante righe prima e dopo il blocco delle differenze
  • -y visualizza i due file confrontati uno vicino all’altro evidenziando le differenze

Diamo il comando

diff -u scrivo.old scrivo.c > scrivo.patch

l’output salvato nel file della patch sarà:

— scrivo.old 2010-07-21 21:43:52.000000000 +0200
+++ scrivo.c 2010-07-21 21:45:12.000000000 +0200
@@ -2,5 +2,7 @@

int main(int argc, char* argv[])
{
– printf(“Buongiorno al mio amico numero 1\n”);
+ int i;
+ for (i = 0; i < 8; i++)
+ printf(“Buongiorno al mio amico numero %d\n”, i);
}

Le righe che contengono numeri indicano le date di creazione dei file e l’inizio delle righe in cui va applicata la patch. I segni meno indicano che nel file destinazione vanno tolte le righe, mentre i più indicano le parti da inserire. Per aggiornare il nostro file scrivo.c occorre dare il comando:
 
patch -p0 < scrivo.patch
 
ovviamente il comando va dato nella stessa directory del file scrivo.c da aggiornare, in quanto utilizzata l’opzione -p0 del comando patch ( per maggiori informazioni vedere man patch ).
In questo articolo quindi abbiamo visto come evitare di dover sempre rilasciare i sorgenti del progetto, basta infatti far scaricare la patch solo per quelli modificati. Troveremo utile questi strumenti quando dovremmo creare i pacchetti della distribuzione, che abbiamo intenzione di sviluppare tramite il corso, per fare le modifiche ad alcuni file e produrre le patch che poi distribuiremo con i sorgenti.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Linux. Contrassegna il permalink.