Lavorare Con Le Patch In Linux [Parte 1]

linux_logo
Tutti i progetti che coinvolgono diversi sviluppatori prevedono la necessità di scambiare il codice. La soluzione migliore è ovviamente quella di utilizzare un sistema di controllo versione ( eventualmente distribuito come ad esempio git), tuttavia è ancora molto popolare l’utilizzo delle patch.

Per chi non avesse confidenza con questo strumento, diciamo che una patch non è altro che un file che descrive le differenze tra versioni diverse dello stesso file (o di più files in contemporanea). Per anni gli sviluppatori del kernel linux hanno adottato questo sistema (e molti lo utilizzano ancora) per scambiarsi delle porzioni di codice, questo metodo è quindi semplice e collaudato, vediamo come funziona.

Esistono diversi modi per creare una patch (per il kernel linux cosi come per qualsiasi altro insieme di files). Supponiamo di avere un file disponibile in due versioni che per comodità chiameremo old.txt e new.txt.

Il primo modo per creare la patch (quello più tradizionale) è l’utilizzo del comando diff:

$ diff -uNr old.txt new.txt > new-feature.patch

Il file new-feature.patch contiene ora tutte le informazioni per trasformare il file old.txt nel file new.txt. Il file è in formato testo (quindi comprensibile anche a un umano che voglia visionare il contenuto della patch prima di applicarla) e non è altro che  l’output del comando diff. Ovviamente il procediemnto è scalabile ed applicabile ad un intero albero di sorgenti e non solo a un file.  Le opzioni del comando diff utilizzate servono rispettivamente a:

  • -u inserisce tre righe di contesto per meglio identificare il punto di modifica
  • -N indica di trattare i file mancanti come vuoti (serve nel caso si applichi il comando diff ad una directory nel in cui sono stati aggiunti file rispetto alla versione precedente)
  • -r indica la ricorsione (esplora a fondo tutte le sottodirectory)
Ci sono ovviamente moltre altre opzioni possibili, per conoscerle è sufficiente un man diff.

Applicare una patch è altrettanto semplice utilizzando il comando patch

$ patch -p1 < ./ new-feature.patch

L’opzione p1 indica il numero di slash da rimuovere dal percorso della patch. Serve per applicare la patch a partire da sottoalberi posti in posizioni diverse nel filesystem (per lasciare il percorso inalterato è possibile utilizzare -p0). Come al solito più informazioni sono disponibili utilizzando il manuale (man patch).

A breve anche la seconda parte dell’articolo…

Tag: ,