Divendres de terminal: Patch i Diff

Dues de les eines essencials en el desenvolupament de programari són pegat y Dif. No és un misteri com funcionen, però penso que aquest serà un post interessant. 

Totes dues són molt potents, i això és només com tocar la superfície, tenen més utilitats i altres funcions. Bàsicament amb aquestes dues eines podem crear control de versions,


Dif

Ens referim a comparació, compara un arxiu «original» amb el «nou», i ens informa de les diferències que hi ha entre ells. Aquesta eina també permet crear arxius .patch que ens serveixen per crear pegats dels nostres programes.


pegat

És la comanda amb el qual literalment «parcheamos» nostre arxiu original, afegint i / o eliminant línies d'acord a les instruccions contingudes a l'arxiu .patch


També hi ha vimdiff, Que és una eina visual per aplicar els pegats sense necessitat d'un arxiu .patch, ja que compara «original» i «nou» i sobre el mateix arxiu és possible editar línia per línia o tot el document. Això no ho explicaré però crec que mereix una menció.


Exemple

Ara sí que ho divertit. ¡Exemple!

Aquest és el cas, tenim un script genial que desitja el teu nom i la teva edat, si ets major de 18 anys et diu que pots votar, de el cas contrari et diu que no pots votar.

original.sh

#! / Bin / bash echo "Escriu el teu nom:" read nom echo "Escriu la teva edat:" read edat if [[18 -lt $ edat]] then echo "Hola $ nom, tens $ edat I pots votar!" else echo "Hola $ nom, tens $ edat i no pots votar ..." fi
Imatge d'el codi a Vim

Imatge d'el codi a Vim

A punt, aquí es mostra l'script en execució:

Sembla que tot funciona bé

Sembla que tot funciona bé

Llavors, com a bons usuaris que som, compartim el nostre script a un amic :), però ens arriba un missatge dient que té una falla, que quan té 18 diu que no pot votar quan sí hauria.

Error de lògica :(

Error de lògica 

Ara ens posem a corregir el petit error ia fer unes quantes modificacions ...

nou.sh

#! / Bin / bash maxEdad = 18 echo "Escriu el teu nom:"; read nom echo "Escriu la teva edat:"; read edat if [[$ maxEdad -li $ edat]]; then echo "Hola $ nom, tens $ edat anys I pots votar!" else echo "Hola $ nom, tens $ edat anys i no pots votar ..." fi exit 0
Codi nou escrit en Vim

Codi nou escrit en empenta

Suposem que el script és molt pesat. Aleshores, per no enviar de nou tot l'script, creem un .patch 

$ Diff -u original.sh nuevo.sh> parche.patch

I ara tenim el nostre pegat. Aquí una vista en empenta:

Així es veuen les instruccions d'un .patch. En blanc les línies que no es van modificar, en blau les eliminades, en taronja les agregades.

Així es veuen les instruccions d'un .patch. En blanc les línies que no es van modificar, en blau les eliminades, en taronja les agregades.

I per aplicar-simplement fem servir l'arxiu .patch en l'script a parchar. Aquí es diu originalAmic.sh, Que és una còpia exacta de l'script original.sh

Script d'l'amic

Script d'l'amic

$ Patch originalAmigo.sh <parche.patch

I això ens deixa el nostre arxiu originalAmic.sh així:

Script d'l'amic després d'aplicar el pegat

Script d'l'amic després d'aplicar el pegat

Com poden veure és molt fàcil obtenir els diff i aplicar els patch. De la meva part és tot.

Salutacions gent, ens llegim divendres que ve.


Afegir com a font preferida a Google