Brauche Hilfe zum Befehl [ patch ] !!
Hallo Liste,
sagt mir jetzt nicht man patch oder patch --help ! Die kenn ich
inzwischen ;-)
(Hab's gestern Abend schon mal versucht, aber vielleicht gings ja unter ...)
Habe das Problem, daß ich ein DifferenzFile habe (vermute zumindest,
dass es eins ist),
das ich mit patch ins Orginal einfügen möchte. Sollte ja nicht soooo
schwer sein! Aber
ich schaff's nicht und langsam geht hier mein Vorrat an
AntiFrust-Bonbons zur Neige ;-)
Ich hab mir zum "Üben" das kleinere Patch-File ausgesucht, so dass ich
mich mal traue,
das hier zu posten (s.u.).
Als Befehle habe ich unteranderem
# patch org-file diff-file
# patch < diff-file
# patch -p0 < diff-file
probiert. Auch diverse Parameter habe ich bereits ausgetestet. Aber
alles brachte mehr oder
weniger die gleiche Fehlermeldung:
Patch attempted to create file db.h, which already exists.
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file db.h.rej
Mit dem --verbose Parameter ergibt sich:
Hmm... Looks like a new-style context diff to me...
The text leading up to this was:
--------------------------
|*** db.h.origFri Mar 16 13:20:54 2001
|--- db.hThu Feb 22 11:35:17 2001
--------------------------
Patching file db.h using Plan A...
Patch attempted to create file db.h, which already exists.
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file db.h.rej
done
Hat jemand ne Ahnung, wo hier der Wurm drin ist???? Ist vermutl. ne ganz
dumme Sache - aber ich blick's einfach nicht! :-(
Am Ende ist es doch kein DifferenzFile ...
So, jetzt gleich die Dateien ... ich hoffe von Euch hat jemand ne gute Idee!
Gruß vom
Anatol
Das OrginalFile:
[.............................................................]
#include
Anatol Schirmer wrote:
(Hab's gestern Abend schon mal versucht, aber vielleicht gings ja unter ...)
Nein, das ging nicht unter. Es waere nett, wenn Du Leuten einfach mal ein wenig Zeit zum Antworten laesst. Es liest nicht jeder alle 5 min Emails und es antwortet auch nicht jeder mehrmals am Tag!
[...] Als Befehle habe ich unteranderem # patch org-file diff-file # patch < diff-file # patch -p0 < diff-file probiert. Auch diverse Parameter habe ich bereits ausgetestet. Aber alles brachte mehr oder weniger die gleiche Fehlermeldung:
Meist (z.B. bei einem Kernel-Patch) wird der Patch mit "patch -p1 < patch.file" eingespielt, wenn Du im Verzeichnis bist, in dem die zu patchenden Quellen liegen. Du musst den Patch unbedingt auf die Original-Quellen anwenden -- falls Du vorher schon mal vergeblich versucht hast, einen Patch einzuspielen und irgendwelche Aenderun- gen an Dateien gemacht wurden, dann wird ein erneuter Patchversuch nicht mehr erfolgreich sein. In diesem Falle solltest Du nochmals die Original-Quellen entpacken und es erneut versuchen. Th. -- Thomas Hertweck, Geophysicist Geophysical Institute, University of Karlsruhe
On Mon, 29 Okt 2001, Anatol Schirmer wrote:
# patch < diff-file
Das waere der richtige, wenn das diff unten korrekt waere... Das ist aequivalent zu:
# patch -p0 < diff-file
was also auch richtig waere. Grund: Es wird/soll keine "Verzeichnis- ebene" weggelassen werden.
weniger die gleiche Fehlermeldung:
Patch attempted to create file db.h, which already exists. Hunk #1 FAILED at 1. 1 out of 1 hunk FAILED -- saving rejects to file db.h.rej
Das ist klar, denn:
Das OrginalFile: [.............................................................] #include
[.............................................................] Das DifferenzFile: [.............................................................] *** db.h.orig Fri Mar 16 13:20:54 2001 --- db.h Thu Feb 22 11:35:17 2001 *************** *** 0 **** --- 1,17 ---- + #ifndef _DB_
[..] das diff fuegt nur Zeilen hinzu, aber db.h (die zu patchende Datei) ist nicht leer (bes. Zeile 1 ;). D.h. es gibt einen Konflikt, den patch nicht aufloesen kann. Ach ja, mach das nicht mit /usr/include/db.h und/oder /usr/include/db3/db.h, das kann unangenehm werden! Und noch ein ach ja, das erste diff, das mit den '!', '+' und '-' (und '<','>' an den Zeilenanfaengen war ein mix verschiedener Varianten von diff, ich bezweifle, dass das geht... -dnh -- 113: c't Eine weniger gelesene Zeitschrift. (OLG Düsseldorf: AZ 20 U 78/98)
* David Haller schrieb am 30.Okt.2001:
On Mon, 29 Okt 2001, Anatol Schirmer wrote:
# patch -p0 < diff-file
was also auch richtig waere. Grund: Es wird/soll keine "Verzeichnis- ebene" weggelassen werden.
Was bedeuten die Zahlen genau. Hat das was damit zu tun, wo der patch gemacht wurde, denn manchmal klappt es mit -p0 und manchmal mit -p1, obwohl ich mich eigentlich immer im Verzeichnis über dem Verzeichnis befinde, das gepacht werden soll. Und Anatol, bist Du Dir sicher, daß der patch der patch zu Deiner Version ist? Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/produkte/buecher/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/shar/doc/sdb/de/html/literatur.html |Zufallssignatur 5
Am Die, 30 Okt 2001 schrieb Bernd Brodesser:
* David Haller schrieb am 30.Okt.2001:
On Mon, 29 Okt 2001, Anatol Schirmer wrote:
# patch -p0 < diff-file
was also auch richtig waere. Grund: Es wird/soll keine "Verzeichnis- ebene" weggelassen werden.
Was bedeuten die Zahlen genau. Hat das was damit zu tun, wo der patch gemacht wurde, denn manchmal klappt es mit -p0 und manchmal mit -p1, obwohl ich mich eigentlich immer im Verzeichnis über dem Verzeichnis befinde, das gepacht werden soll.
IIRC bedeuten die Zahlen, wie viele Verzeichnisebenen bei den Dateinamen aus dem diff-Output weggelassen werden sollen. Bsp. Du hast eine Datei x.y, für die ein Patch existiert Dann gibt es zwei Möglichkeiten: Du legst zwei Verzeichnisse an und diffst die gegeneinander Ergebnis ist ein patch in der art *** vz1/x.y --- vz2/x.y Wenn Du den einspielen willst, wechselst Du in das Verzeichnis, wo x.y liegt. Bei den Dateinamen im Patchfile soll dann genau eine Verzeichnisebene nicht beachtet werden => patch -p1 Zweite Alternative ist, Du benennst die gepatchte Datei nach x.z um und diffst dann Ergebnis ist ein Patch *** x.y --- x.z Wenn Du den einspielen willst, sol der Dateiname hinter *** direkt verwendet werden => patch -p0 Hoffe, das ist so richtig. Gruß Christoph -- Christoph Maurer - Paul-Röntgen-Straße 7 - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
[...]
Wenn Du den einspielen willst, sol der Dateiname hinter *** direkt verwendet werden => patch -p0
Hoffe, das ist so richtig.
Klingt ziemlich gut - und so ähnlich hab ich 's auch in der man patch verstanden :-) Gruß Anatol -- --------------------------------------------- | recordcaster | das independent internet radio aus berlin --------------------------------------------- | internet : http://www.recordcaster.de | eMail : anatol@recordcaster.de | phone : +49 30 362 85 422 ---------------------------------------------
Christoph Maurer wrote:
Am Die, 30 Okt 2001 schrieb Bernd Brodesser:
[patch]
Was bedeuten die Zahlen genau. Hat das was damit zu tun, wo der patch gemacht wurde, denn manchmal klappt es mit -p0 und manchmal mit -p1, obwohl ich mich eigentlich immer im Verzeichnis über dem Verzeichnis befinde, das gepacht werden soll.
IIRC bedeuten die Zahlen, wie viele Verzeichnisebenen bei den Dateinamen aus dem diff-Output weggelassen werden sollen.
Steht sogar mit ausfuehrlichem Beispiel in "man patch" unter Option -p..... CU, Th. -- Thomas Hertweck, Geophysicist Geophysical Institute, Karlsruhe University (TH)
[...]
Und Anatol, bist Du Dir sicher, daß der patch der patch zu Deiner Version ist?
Sicher ist man sich nie ... bis es klappt ;-) Und ich glaube, es funzt :-)) Bin zwar mit meinem Hauptprogramm noch nicht durch, aber das hängt gerade an einer anderen Stelle ;-) Gruß Anatol -- --------------------------------------------- | recordcaster | das independent internet radio aus berlin --------------------------------------------- | internet : http://www.recordcaster.de | eMail : anatol@recordcaster.de | phone : +49 30 362 85 422 ---------------------------------------------
Mojn, Mojn!
[..]
das diff fuegt nur Zeilen hinzu, aber db.h (die zu patchende Datei) ist nicht leer (bes. Zeile 1 ;). D.h. es gibt einen Konflikt, den patch nicht aufloesen kann.
Aaaaa .... so ist das also! :-)
Ach ja, mach das nicht mit /usr/include/db.h und/oder /usr/include/db3/db.h, das kann unangenehm werden!
Jup! Hab mir schon sowas gedacht! Probiere es daher an einer Kopie aus .... ... hab glaube ich gerade eine Erleuchtung gehabt! :-) Wenn nur ein leeres db.h File gefüllt wird, dann wird wohl ein neues erzeugt werden! Damit dürfte dann auch nicht die /usr/include/db.h gemeint sein! Und wenn ich mir die ersten patch-Zeilen ansehe, dann wird db.h als include neu eingefügt! Bingo! Sieht doch gar nicht sooo schlecht aus ;-)
Und noch ein ach ja, das erste diff, das mit den '!', '+' und '-' (und '<','>' an den Zeilenanfaengen war ein mix verschiedener Varianten von diff, ich bezweifle, dass das geht...
Hmm .. ich glaube es geht trotzem :-) Habe jetzt die erste Datei gepached, und folgende Ausgabe erhalten: [......................................................................................................] The text leading up to this was: -------------------------- |*** tcpserver.c.orig Wed Mar 14 10:21:33 2001 |--- tcpserver.c Fri Mar 16 13:53:52 2001 -------------------------- Patching file tcpserver.c using Plan A... Hunk #1 succeeded at 1. Offset changing from 0 to 0 [...] Hunk #8 succeeded at 416. patch unexpectedly ends in middle of line Offset changing from 0 to 0 Hunk #9 succeeded at 424 with fuzz 1. done [......................................................................................................] Das fuzz 1 verwirrt mich noch etwas! Ist das schlimm??? Der Rest funktioniert! Jippy! :-) Jetzt neu comilieren ... Thanks & Gruß Anatol -- --------------------------------------------- | recordcaster | das independent internet radio aus berlin --------------------------------------------- | internet : http://www.recordcaster.de | eMail : anatol@recordcaster.de | phone : +49 30 362 85 422 ---------------------------------------------
participants (5)
-
Anatol Schirmer
-
B.Brodesser@t-online.de
-
Christoph Maurer
-
David Haller
-
Thomas Hertweck