Strumenti Utente



creare_ed_applicare_patch

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.

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.

  1. – MED_SRC_5.1.4.origsrc/MEDLoader/MEDLoader.cxx 2010-07-07 20:06:41.319275884 +0200 +++ MED_SRC_5.1.4src/MEDLoader/MEDLoader.cxx 2010-07-09 16:36:07.678049186 +0200

@@ -253,12 +253,13 @@

   for(int i=0;i<nfam;i++)
     {
       int ngro=MEDnGroupe(fid,(char *)meshName,i+1);
+      med_int ngroMI=ngro;
       med_int natt=MEDnAttribut(fid,(char *)meshName,i+1);
-      med_int *attide=new int[natt];
-      med_int *attval=new int[natt];
+      med_int *attide=new med_int[natt];
+      med_int *attval=new med_int[natt];
       char *attdes=new char[MED_TAILLE_DESC*natt+1];
       char *gro=new char[MED_TAILLE_LNOM*ngro+1];

Le prime due righe ci dicono quali sono i file che sono stati confrontati per scrivere la patch. La riga “ @@ -253,12 +253,13 @@” ci permette di individuare la porzione del file su cui stiamo intervenendo. Infine le righe che iniziano con il segno + saranno aggiunte, quelle col segno meno saranno rimosse.

Facile no?

Creare ed applicare una patch

Tranquilli però, non dovete scrivere a mano le vostre patch! Le genereremo automaticamente con il comando diff.

Partiamo da un caso semplice, supponendo di lavorare con un singola file, sorgente.c, che abbiamo modificato in sorgente.c.mod. Per creare la patch usiamo il comando

$ diff -u sorgente.c sorgente.c.mod > 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 diff e di patch.

Comments


creare_ed_applicare_patch.txt · Ultima modifica: 2014/12/04 19:50 da mickele

Facebook Twitter Google+ Digg Reddit LinkedIn StumbleUpon Email