Wie erstelle ich einen Patch ?

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Wie erstelle ich einen Patch ?

Beitrag von wenf » 25.03.2004 13:58:15

hi Forum

ich habe ein Verzeichnis mit einem original Quellencode
und ein anderes Verzeichnis, in welchem gepatchte und leicht modellierte Sourcecodes der gleichen Software herumliegen.

nun möchte ich gerne eine PATCH-Datei erstellen, damit ich für spätere installationen mir einfach wieder die Quellen aus dem Netz sauge mit

Code: Alles auswählen

patch < mein-patch.patch
alle von mir gewünschten änderungen vornehme, und dann zu make make install usw. weitergehen.

Benutzeravatar
zyta2k
Beiträge: 2446
Registriert: 14.03.2003 09:18:00
Kontaktdaten:

Beitrag von zyta2k » 25.03.2004 14:04:27

Code: Alles auswählen

diff -Naur verzeichnis1 verzeichnis2 > my.diff

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 14:12:41

cool
geil ein patch mit 2,1MB
da habe ich dann doch mehr geändert *gg*

DANEK für die schnelle hilfe

Benutzeravatar
zyta2k
Beiträge: 2446
Registriert: 14.03.2003 09:18:00
Kontaktdaten:

Beitrag von zyta2k » 25.03.2004 14:19:58

wenf hat geschrieben:cool
geil ein patch mit 2,1MB
da habe ich dann doch mehr geändert *gg*
DANEK für die schnelle hilfe
kanns ihn ja noch durch gzip sausen lassen

Code: Alles auswählen

diff -Naur dir1 dir2 | gzip > patch.gz
Kommt kleiner ;)
Btw: Wenn du ein Diff eines ProgrammVerzeichnisses machst würd ich vorher ein make distclean machen ;)

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 14:46:09

zyta2k hat geschrieben:Wenn du ein Diff eines ProgrammVerzeichnisses machst würd ich vorher ein make distclean machen ;)
warum ?
was ist das / was bringt das

Benutzeravatar
zyta2k
Beiträge: 2446
Registriert: 14.03.2003 09:18:00
Kontaktdaten:

Beitrag von zyta2k » 25.03.2004 15:12:35

Also:

Du hast ein Verzeichnis A (ein frisch ausgepacktes Programm). Darin wurde noch kein configure, make oder dergleichen ausgeführt.

Nun erstellst du eine 1:1 Kopie dieses Ordners und sagst ihm B.

Im B nun, machst du Änderungen rein (was auch immer). compilierst es, um zu testen ob die Änderungen auch funktionieren, etc...

Und nun machst du einen Patch von A -> B.

Das Problem:
Im B liegen noch alle Object/Binary Files herum, die dir make generiert hat. Diese würden alle in den Patch miteinfliessen, was ja nicht der Zweck der Sache ist.

ein make distclean löscht dir aus dem Verzeichnis alle Objekte und Binaries die dir make erstellt hat und dazu noch die config.cache und Konsorten.

Mit erscheint ein 2.1MB grosser Patch daran zu liegen und nich an Änderungen deinerseits. Das wären 1000ende Zeilen Code die du hättest ändern müssen...

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 15:34:52

nene daran habe ich schon gedacht

*gg* habe ein tar.gz entpackt = A
1:1 kopier = B

habe in B patches eingespielt sources verändert und dateien hinzugefügt

habe B dann 1:1 kopiert = C

habe dann in B make usw ausgeführt (test ob alles geht)

dann

diff -Naur C A > my.diff

das mußte schon stimmen
na ja da sind einige Dateien dazugekommen

19k 3k 41k 63k das sind die größen den einzelpatches

hmmm irgendwie viel zu groß

ein
diff -Naur B A > my.diff
hat 4,2MB

Benutzeravatar
g-henna
Beiträge: 733
Registriert: 03.11.2003 14:59:56
Wohnort: Berlin

Beitrag von g-henna » 25.03.2004 17:29:54

Hi!

Nun ja, ich weiß ja nicht, wei intelligent diff ist. Wenn du z.B. aus einer Datei
  • 1. bla
    2. hallo
    3. wie geht's?
durch Bearbeiten folgende Datei machst:
  • 1. bla
    1 b. jo...
    2. hallo
    3. wie geht's?
Sieht dann das diff-file, dass genau eine Zeile eingefügt werden muss oder sieht es, dass drei Zeilen anders sind als vorher und noch eine mehr dranhängt?

Bye
g-henna
follow the penguin...

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 17:42:45

keine ahnung würde ich auch gerne wissen
2,1 MB ist der Patch
und 2.4MB ist der gesammte Quellencode

hmmm da is was faul
bzw hätte ich mir das ergebnis etwas anders vorgestellt

Benutzeravatar
jogix
Beiträge: 776
Registriert: 05.10.2002 20:08:16
Wohnort: Lampertheim
Kontaktdaten:

Beitrag von jogix » 25.03.2004 19:39:42

g-henna hat geschrieben: Sieht dann das diff-file, dass genau eine Zeile eingefügt werden muss oder sieht es, dass drei Zeilen anders sind als vorher und noch eine mehr dranhängt?
diff sieht, daß eine Zeile eingefügt wurde. Diff ist ja nicht doof ;)

Auszug aus einem Patch für GNU / Hurd coreutils:

Code: Alles auswählen

--- Makefile.am.~1.33.~   2004-03-12 22:35:37.000000000 -0800+++ 
Makefile.am 2004-03-14 05:41:22.000000000 -0800@@ -61,7 +61,7 
@@ nanosec_libs = \
 sleep_LDADD = $(nanosec_libs)
 tail_LDADD = $(nanosec_libs) 

-uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
+uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS) -lps  

su_LDADD = $(LDADD) $(LIB_CRYPT) 

--- uptime.c.~1.40.~   2004-03-07 08:04:03.000000000 
-0800
+++ uptime.c 2004-03-14 05:22:42.000000000 -0800
@@ -47,6 +47,47 @@ static struct option const longopts[] =
   {NULL, 0, NULL, 0}
 };
cheers,
Jochen
___________________________________________________
Testing can prove the presence of bugs, but not their absence. -- Dijkstra

Benutzeravatar
spiffi
Beiträge: 1128
Registriert: 09.08.2003 19:02:27

Beitrag von spiffi » 25.03.2004 19:46:01

g-henna hat geschrieben:Sieht dann das diff-file, dass genau eine Zeile eingefügt werden muss oder sieht es, dass drei Zeilen anders sind als vorher und noch eine mehr dranhängt?
diff ist schon clever genug, um eingefügte oder gelöschte Zeilen zu erkennen.

Edit:
zu langsam... *schnüff*
No language can express every thought unambiguously, least of all this one. -- D. R. Hofstadter

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 20:23:41

ok ist mir schon klar
linux ist ja alles andere als Blöd

dieses neu entstandene Patchfile ist aber viel zu groß

werde mich morgen dem noch einmal annehmen

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 25.03.2004 20:28:45

wenf hat geschrieben:ok ist mir schon klar
linux ist ja alles andere als Blöd
Bin gerade in Krümmelkackerlaune ;-)

was hat das mit Linux zu tun? Kann ich mit diff unter Windows also nicht ordentliche Patche erstellen? :-)
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
wenf
Beiträge: 142
Registriert: 27.08.2003 09:52:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: ÖSI-Land
Kontaktdaten:

Beitrag von wenf » 25.03.2004 20:54:39

Diff ist ja nicht doof
unter linux ist gar nix doof

windows -patches -> wird sicher auch gehen :roll: obwohl mir Linux so viel liber ist als Windoof

aber jeder soll seine eigene meinung haben Bild

Antworten