====== Creare ed applicare patch ====== Vedremo come creare ed applicare patch ad un codice sorgente. ===== A cosa servono le patch ===== Supponiamo di aver scaricato dal sito pippo.org il codice sorgente di un programma. Compiliamo il programma con i canonici comandi $ ./configure $ make Parte così la compilazione del codice sorgente, vale a dire: il codice del programma, scritto il più delle volte in C o C++, viene trasformato in codice eseguibile dalla macchina. Può capitare (nessuno è perfetto!) di incontrare un errore in questa fase. Spesso per risolvere questo tipo di errori è necessario modificare il codice sorgente. Se non siete in grado di farlo direttamente, magari riuscirete a trovare qualcuno che lo faccia per voi. Supponiamo un vostro amico abbia modificato i file, e voglia inviarvi le modifiche apportate. La prima possibilità è inviarvi l'intero codice sorgente, un po' scomodo se i file sono tanti e di grandi dimensioni. L'alternativa è creare una patch, vale a dire un file testo contenente le sole modifiche apportate. ~~READMORE~~ ===== Un esempio di file patch ===== Per capire come sia possibile scrivere in un file testo solo le variazioni apportate al codice apriamo un file patch di esempio. --- MED_SRC_5.1.4.orig//src/MEDLoader/MEDLoader.cxx 2010-07-07 20:06:41.319275884 +0200 +++ MED_SRC_5.1.4//src/MEDLoader/MEDLoader.cxx 2010-07-09 16:36:07.678049186 +0200 @@ -253,12 +253,13 @@ for(int i=0;i sorgente.patch Abbiamo così creato il file sorgente.patch, un file testo che contiene le sole differenze tra sorgente.c e sorgente.c.mod. Per applicare le modifiche al file sorgente.c usiamo invece il comando patch $ patch sorgente.c < sorgente.patch Nel caso i file modificati siano più di uno, è possibile creare un'unica patch. Supponiamo di avere due directory, la prima è sorgente-dir, la seconda sorgente-dir.mod. Alla seconda directory abbiamo applicato le modifiche. Per creare il file patch usiamo il comando $ diff -Naur sorgente-dir sorgente-dir.mod > sorgente-dir.patch Analogamente a quanto visto prima useremo il comando patch per applicare le modifiche. Andiamo nella directory sorgente-1.0.0 e digitiamo $ patch -Np1 -i sorgente-dir.patch Per approfondire l'uso dei comandi vi rimando alle pagine di manuale di [[http://linux.about.com/library/cmd/blcmdl1_diff.htm|diff]] e di [[http://linux.about.com/od/commands/l/blcmdl1_patch.htm|patch]].