Patchen mit Windows – Tutorial

Früher oder später wenn man in die Drupalwelt eintaucht wird man mit "patches" konfrontiert. Es kann ein wenig verwirrend sein, besonders für Windowsbenutzer, da sich Dateien nur über die Kommandozeile patchen lassen (auf jeden Fall ist mir nicht anderes bekannt). Daher ein kleines Tutorial:

Was und warum ein Patch?
Eine Patchdatei ist lediglich eine Textdatei, welche die Differenzen zwischen zwei Dateien aufzeigt. Dabei werden jeweils Zeilen, welche entfernt werden mit einem Minus markiert und Zeilen, welche hinzugefügt werden, mit einem Plus markiert. Das Ganze lässt sich natürlich von Hand machen, was jedoch bei vielen Änderungen recht mühsam wird.

Patches werden meinstens von Benutzern geschrieben, welche ein Modul nicht unterhalten und daher den Code nicht direkt ändern können. Der Patch wird in der Issue Queue gepostet und kann so einfach von anderen Benutzern getestet werden und verbessert werden. Patches sind somit da, um Bugs zu beheben oder zusätzliche Funktionen anzubieten.

Patch erstellen
Ein Patch lässt sich sehr leicht erstellen. Es gibt hier diverse Programme (z.B. WinMerge). Dabei gibt es bei Winmerge ein rechte Datei und eine Linke, welche dann verglichen werden. Wenn man einen Patch erstellt, die folgenden Einstellungen beachten:
Tools -> Patch generieren
Beim Style: Unified

Was kommt dabei raus Datei 1:


Hallo welt
hm
ja wohl

Und die zweite Datei sieht wie folgt aus:


hallo Welt
ich bin hier
ja wohl

Das Resultat sieht dann wie folgt aus:


--- C:/Dokumente und Einstellungen/Administrator/Desktop/tmp/rechts.txt Tue Apr 29 10:50:32 2008
+++ C:/Dokumente und Einstellungen/Administrator/Desktop/tmp/links.txt Tue Apr 29 10:50:38 2008
@@ -1,3 +1,3 @@
-Hallo welt
-hm
+hallo Welt
+ich bin hier
ja wohl
No newline at end of file

Patch anwenden

Die Meisten werden jedoch wohl eher weniger oft einen Patch erstellen, dafür lieber mal einen Patch benutzen. Das ist eigentlich auch ganz simpel, wenn man weiss wie ;), daher ein kleines Tutorial, mit ein paar Bildern.

  1. UnixTools runterladen
  2. Unix Tools irgendwohin entpacken, z.B. c:unixtools
  3. Klassenpfad von Windows entsprechend einrichten (Systemsteuerungen -> System -> Erweitert -> Umgebungsvariablen -> Bearbeiten)
  4. Hier sollte bereits einigen drin stehen. Es wird jetzt einfach noch der Pfad zur Datei Patch.exe hinzugefügt. Könnte dann z.B. so aussehen: C:unixtoolsusrlocalwbinpatch.exe
  5. Kommandozeile öffnen (Start -> Ausführen -> CMD -> ok)

[inline:classpath.jpg]

Jetzt ist eigentlich alles soweit vorbereitet. Bevor es weitergeht, muss jetzt sichergestellt werden, dass die meine_datei.patch im gleichen Verzeichnis wie die zu patchende Datei liegt. … machen wir weiter.

  1. In der Kommandozeile in das Verzeichnis wechseln, wo der Patch und die zu patchende Datei liegt.
  2. Folgenden Befehl eingeben: patch -p0 < patch_file.patch

[inline:patch.jpg]

Das sollte es eigentlich schon gewesen sein. Hier noch ein paar Erklärungen zu möglichen Fehlern:

  1. Es kann vorkommen, dass die zu patchende Datei nicht gefunden wird. Dann muss diese noch von Hand angegeben werden. -> Siehe Punkt 3
  2. Weiss ich auch nicht genau, was das soll…
  3. -p0 entfernt die anzahl von Linien am Beginn des Files.

Hilfe kann man wie folgt erlangen:


patch --help

Oft wird es vorkommen, dass eine Meldung kommt "Junked Failed" oder so ähnlich. Das kommt wohl in den meisten Fällen daher, dass die zu patchende Datei nicht mit dem Patch übereinstimmt. Daher im sicherstellen, dass man die richtige Datei zum Patchen hat -> Das kann manchmal gar nicht so einfach sein…

So, das wars… viel Erfolg