| Linux – Friheden til at programmere: Version 2.5.20050330 – 2020-12-31 | ||
|---|---|---|
| forrige | Kapitel 5. Programmørens værktøjskasse | næste |
Ofte vil programmøren skulle se hvad der er ændret mellem to udgaver
af en fil. Er der måske 2000 linjer kode er dette ofte umuligt at gøre manuelt, og derfor bør du se nærmere på et par værktøjer der kan hjælpe dig meget. Lad os tage et eksempel på hvordan dette gøres:
Eksempel 5-10. Anvendelse af diff
Først ser vi på en program-stump vi kan kaldeA_org.c.
typedef struct {
unsigned int R;
unsigned int G;
unsigned int B;
} RGB_Image;
typedef struct {
int *m,*n;
int No;
} pixar;
Denne skal vi sammenligne medA.c, der ser
således ud:<code>typedef struct {
unsigned int R;
unsigned int G;
unsigned int B;
} RGB_Image;
typedef struct {
int *m,*p; int No;
} pixar;
int a,b,c;</code>
De ser jo meget ens ud, de to stumper kode. For at se forskelle kører vi
hven%diff A_org.c A.c8c8 < int *m,*n; --- > int *m,*p; 10a11,13 > > int a,b,c;
Vi kan se at linje 8 er ændret (8c8 betyder at linje 8 iA_org.cer ændret i forhold til linje 8 iA.c). Næste information (10a11,13) er at linje 11
til 13 iA.cer appended, dvs. tilføjet, i forhold til linje 10 iA_org.c.
En lille huskeregel mht. > og <: < er filen til venste i
argumentlisten til **diff** , og tilsvarende er > filen til højre (2. argument).
Det skal også nævnes at man ofte laver en “unified diff” med
hven%diff -u A_org.c A.c--- A_org.c Tue Dec 19 21:ec 19 21:56:43 2000
@@ -5,6 +5,8 @@
} RGB_Image;
typedef struct {
- int *m,*n;
+ int *m,*p;
int No;
} pixar;
+
+int a,b,c;
Her er samme information gemt, men med en anden syntaks. Med-og+vises hvilke linjer som er ændret, men også et par af de foregående og
efterfølgende linjer kommer også med. Det gør det lidt nemmere at
finde stedet for ændringer efterfølgende.
Ofte er der kun små ændringer mellem to udgaver af en fil, og derfor ses det ofte at man distribuerer kildetekst til en basisudgave og derefter en eller flere “lapper” til programmet. Lapperne er filer lavet ved at finde forskellen mellem basisudgaven og den nye udgave af filen med diff . Lad os se dette i et eksempel.
Eksempel 5-11. Anvendelse af patch
Normalt anvendes lapper til at sende ændringer/opdateringer fra programmøren til andre der programmerer på samme fil(er). Derfor er filnavneA_org.cogA.csom var anvendt i eksemplet ovenfor normalt anvendt som den originale fil i forhold til den nye. Ofte har programmøren to fil-strukturer liggende - den originale og den nye med ændringer.
Først lader vi programmøren af programmet danne en lap svarende til forskellen mellem filerneA_org.cogA.chvor de to filer er nævnt ovenfor:
hven%diff -u A_org.c A.c > A_patch
Bemærk at jeg her, ligesom i de forrige eksempler, vender de to filer så den nye er sidst!
Nu kan programmøreren sende lappenA_patchtil andre programmører som kan opdatere deresA.c. Lad os prøve dette. Vi antager nu at vi er brugeren “tyge” som har en filA.csom er lig med programmørens filA_org.c.
hven%patch < A_patchpatching file A.c
Så nemt er det at opdatere filen. En lap kan indeholde rettelser til mange filer som så automatisk opdateres.