Creare una patch con patch e diff


shell command for bloggers

Creare la patch

Tutte le volte che devo creare una patch non mi ricordo mai la sintassi, un appunto sul sito è proprio quello che mi serve. Inizio con le basi, poi magari aggiungerò qualcosa più avanti.

Supponiamo di avere la directory originale Dir1 e la directory contenente le modifiche Dir2, entrambe con relative sottodirectory. La patch si crea molto semplicemente con il comando:

diff -crB Dir1 Dir2 > Dir2.patch

-c (Context) fa l'output di alcune righe attorno alle modifiche di default 3. Molto utile per la leggibilità della patch

-r (Recursive) crea la patch dell'intero albero di directory

-B (ignore Blank) ignora le linee bianche, molto utile anch'essa per la leggibilità

Patchare un sorgente

Una volta ottenuta la patch non ci resta che applicarla alla directory interessata, Dir1 nel nostro caso. Prima di tutto ne facciamo una copia di backup, poi procediamo con un dry run, che semplicemente simula l'applicazione della patch senza fare nulla, per evidenziare eventuali errori:

cp Dir1 Dir1.bkp
cd Dir1
patch --dry-run -p1 -i  ../Dir2.patch

Se tutto va a buon fine avremo un ouput del tipo:

patching file Test1.c
patching file Test2.c
patching file Test3.c
[...]

In caso di errore, invece:

patching file Test1.c
patching file Test2.c
patching file Test3.c
Hunk #2 FAILED at 382.
1 out of 2 hunks FAILED -- saving rejects to file Test3.c.rej
[...]

Se il dry run ha dato esito positivo possiamo applicare la patch, aggiornando così il sorgente alla nuova versione:

patch -p1 -i  ../Dir2.patch

Per maggiori info RTFM, oppure visionate l'ottimo tutorial di rechosen. Un giro su google, inoltre, restituirà tonnellate di materiale.