Terminal fredag: Patch och Diff

Två av de väsentliga verktygen i mjukvaruutveckling är Lappa y Diff. Det är inget mysterium hur de fungerar, men jag tror att det här kommer att bli ett intressant inlägg. 

Båda är mycket kraftfulla, och det här skrapar bara på ytan, de har fler verktyg och andra funktioner. Med dessa två verktyg kan vi skapa versionskontroll,


Diff

Vi hänvisar till jämförelse, den jämför en "original" fil med den "nya" och informerar oss om de skillnader som finns mellan dem. Detta verktyg låter oss också skapa .patch-filer som vi kan använda för att skapa patchar för våra program.


Lappa

Det är kommandot med vilket vi bokstavligen "lappar" vår originalfil, lägger till och/eller tar bort rader enligt instruktionerna i .patch-filen.


Det finns också vimdiff, som är ett visuellt verktyg för att applicera patchar utan behov av en .patch-fil, eftersom den jämför "original" och "new" och på samma fil är det möjligt att redigera rad för rad eller hela dokumentet. Detta kommer jag inte att förklara men jag tycker att det förtjänar ett omnämnande.


Exempel

Nu är det roliga. Exempel!

Så är fallet, vi har ett coolt manus som frågar efter ditt namn och din ålder, om du är över 18 så står det att du kan rösta, annars säger det att du inte kan rösta.

original.sh

#!/bin/bash echo "Ange ditt namn: " read name echo "Ange din ålder: " read age if [[ 18 -lt $age ]] sedan eka "Hej $name, du är $ålder och du kan rösta!" else echo "Hej $name, du är $ålder och kan inte rösta..." fi
Bild på koden i Vim

Bild på koden i Vim

Klart, här är det körande skriptet:

Det verkar som att allt fungerar bra

Det verkar som att allt fungerar bra

Så, bra användare som vi är, vi delar vårt manus till en vän :), men vi får ett meddelande som säger att det har en bugg, att när det är 18 så står det att det inte kan rösta när det ska.

Logiskt fel :(

Logiskt fel 

Nu börjar vi rätta till det lilla felet och göra några ändringar...

new.sh

#!/bin/bash maxAge=18 echo "Ange ditt namn: "; läs namneko "Ange din ålder: "; läs ålder if [[ $maxAge -le $age ]]; upprepa sedan "Hej $namn, du är $ålder år och du kan rösta!" else echo "Hej $name, du är $age år och kan inte rösta..." fi exit 0
Ny kod skriven i Vim

Ny kod inskriven vim

Anta att manuset är väldigt tungt. Så för att inte skicka hela skriptet igen skapar vi en .patch 

$ diff -u original.sh new.sh > patch.patch

Och nu har vi vår patch. Här är en vy in vim:

Så här ser instruktionerna för .patch ut. I vitt de linjer som inte modifierades, i blått de borttagna, i orange de som tillagts.

Så här ser instruktionerna för .patch ut. I vitt de linjer som inte modifierades, i blått de borttagna, i orange de som tillagts.

Och för att tillämpa det använder vi helt enkelt .patch-filen i skriptet för att patcha. här heter det originalAmigo.sh, som är en exakt kopia av manuset original.sh

väns manus

väns manus

$ patch originalFriend.sh < patch.patch

Och detta lämnar vår fil originalAmigo.sh Så:

Vänens manus efter applicering av plåstret

Vänens manus efter applicering av plåstret

Som du kan se är det mycket lätt att få tag i diffarna och applicera plåstren. Allt är från mig.

Hälsningar folk, vi läser nästa fredag.


Lägg till som prioriterad källa i Google