archilles scriptworld Forum

» Startseite
  » Support-Foren
      » Häufig gestellte Fragen (FAQ)
          · FAQ: Wie pflege ich eigene Änderungen beim Update des Quellcodes ein?

Seite: 1

FAQ: Wie pflege ich eigene Änderungen beim Update des Quellcodes ein? Archilles
Version 1 - 24. Mai 2005 12:05:00 CEST

Hallo zusammen,

welcher Webmaster kennt es nicht? Er nutzt eine Software von Drittanbietern und hat sie an seine Bedürfnisse angepasst. Wenn ein Programm im Quellcode vorliegt und die Lizenz es erlaubt, ist das nicht selten. Eine der unbeliebtesten Hürden stellt sich ein, wenn es ein Update gibt und dieses eingepflegt werden muß. Kopiert man nun einfach alle Dateien, sind die eigenen Änderungen weg und erneut nachzutragen. Je nach Umfang der Aktualisierungen, deren Dokumentation und Häufigkeit, wird dieses Unterfangen ab einem bestimmten Punkt zu aufwendig. Etwas leichter hat man es, wenn möglichst viele Einstellungen in Dateien lagern, welche davon nicht betroffen sind.

Mit ein paar kleinen Programmen kann man dem beikommen und sich helfen lassen. Ziel ist es die Änderungen zu erfassen und in die neue Version einzuspielen. Dabei gibt es zwei offensichtliche Wege. Beim ersten dokumentiert man die Änderungen, welche man gegen das Original gemacht hat und überträgt diese auf die neue Version. Zum anderen kann man auch auf die Änderungen der neuen Version gegenüber der aktuellen setzen. Welcher Weg von beiden funktioniert, hängt von Fall zu Fall ab. Ich verwende meistens den zweiten Weg. Für dieses How-To wird folgendes benötigt:
  • Die Quellen des Original-Archivs oder der aktuellen Version mit den eigenen Änderungen. Im Falle des Talkboard Forum 2 wird hier benötigt: Alle php-Dateien aus contrib, include, die tpl-Dateien aus tbfV2, usr/lang, die .js-Dateien in usr und alle Dateien des Hauptordners. Die ursprüngliche Verzeichnisstruktur ist beizubehalten.

  • Das Gegenstück der benötigten Quellen von der neuen Version. Wer sich nicht sicher ist, welche Dateien benötigt werden, vergleicht einfach alles zwischen beiden. Bilder oder Dokumentationen lassen sich in der Regel ausklammern und direkt kopieren. Die Änderungsprozedur beschränkt sich meist "nur" auf den Programm-Quellcode.

  • WinMerge zeigt die Unterschiede von zwei Dateien oder Verzeichnissen unter Windows an. Hiermit läßt sich gut die alten mit den neuen Quellen vergleichen und, wer Geduld hat, von Hand angleichen.

  • patch und diff runden das Paket ab. Unter Linux sind sie fast immer dabei und Windows-Benutzer können diese einfach nachrüsten. Von GnuWin32 lassen sich die Windows-Ports fischen. Rechts unter "Packages" sind diese zu finden. Einmal nach "diffutils" suchen und das "bin" sowie die "dep" herunterladen. Ersteres enthält die diff.exe und das zweite die benötigten DLLs. Zum anderen nach "patch" schauen und ebenfalls herunterladen. DLLs werden hier nicht benötigt.

Es empfiehlt sich mit Kopien der Quellen in einem eigenen Verzeichnis zu arbeiten!

Es geht los...

Ich habe hier als Beispiel den Ordner p:\ramdisk genommen. Es soll das TBF von Version 2.0.1 auf 2.0.2 aktualisiert werden. Da es diese beim Erstellen dieses Dokuments noch nicht gab, kommt ein Auszug der aktuellesten Quellen zum Zuge. Vom Ursprungsforum habe ich die oben gelisteten Dateien in das Verzeichnis p:\ramdisk\src-tbf_201 kopiert. Der Verzeichnisbaum sieht dann folgendermaßen aus:

Quelltext:
============================================================
--\ramdisk
  --\src-tbf_201
    --\contrib
    --\include
      --\cron
    --\template
      --\tbfV2
    --\usr
      --\lang

Im Verzeichnis p:\ramdisk\src-tbf_dev landen die aktuellen Gegenstücke. WinMerge bekommt einen Platz im Programme-Ordner und die beiden anderen in p:\ramdisk. Wer sie dauerhaft nutzen möchte, kann sie in den Windows-Hauptordner kopieren.

Wir starten WinMerge und gehen auf "Öffnen". Es erscheint ein Fenster, wo wir beide Verzeichnisse angeben müssen. Unter "Links" sollte der Ordner mit dem alten Code stehen und "Rechts" der neue. Als Filter genügt "*.*".

embedded image

Das Erstellen des Vergleichs dauert ein paar Sekunden. Dabei erscheint ein kleines Fenster, welches über den Status informiert und danach von Hand geschlossen werden muß. Es öffnet sich bei jedem Verzeichniswechsel oder manueller Aktualisierung. Wen das nervt, kann das in den Einstellungen des Programms auch abschalten. Dann schließt sich das Fenster automatisch.

embedded image

In dieser Übersicht sehen wir den Vergleich. Mittels Rechtsklick auf einer Datei öffnet sich ein Kontextmenü mit den Funktionen. Wenn eine neue Datei nur in einem Verzeichnis existiert, kann sie hier kopiert werden. Ebenso kann eine alte, jetzt unbenötigte, Datei gelöscht werden. Ein Doppelklick auf eine Datei öffnet ein Editorfenster für den manuellen Abgleich. Das mag bei wenigen Dateien machbar sein, bei größeren Updates wird es jedoch schnell nervig. Hier verwenden wir daher WinMerge nur zum Vergleichen beider Quellen.

embedded image

Wer es dennoch von Hand machen möchte, sollte von Stelle zu Stelle gehen und kurz vergleichen. Ein Block kann man doppeltklicken, um ihn auszuwählen und dann per Rechtsklick "nach Rechts zu kopieren". Das erfordert bei Konflikten jedoch Kenntnisse, um die Funktionen im Quellcode. Daher empfehle ich das nur erfahrenen Anwendern.

Jetzt geht es daran die Änderungen zu dokumentieren. Dafür ziehen wir das Programm diff heran. Es vergleicht alle Dateien beider Verzeichnisse und speichert die Unterschiede in einer separaten Datei. Dies wird in der Softwarewelt häufig gemacht - auch gerade wenn es um Patches geht. Dafür benötigen wir die MS-DOS Eingabeaufforderung. Sie befindet sich im Startmenü unter "Zubehör". Als erstes wechseln wir auf das Laufwerk, wo wir die Dateien plaziert haben und dann in das eigentliche Verzeichnis.

embedded image

Linux-Benutzer machen das analog auf einer Shell oder einer Konsole (Strg+Alt+F1 bis F6). Hier gilt es natürlich die unterschiedlichen Pfade zu beachten, welche beide Welten unterscheidet :-)

Im folgenden Bild steht der Befehl für das Erstellen eines "Diff-File". Je nach Geschwindigkeit des Rechners, kann dies ein paar Sekunden dauern. Dahinter wird auch gleich der Befehl für patch eingegeben, um die Änderungen von neu gegen alt im alten Quellcode einzuspielen. Wer den erstmal durchspielen möchte, sollte die Option "--dry-run" hinter "patch.exe" eingeben. Bei Problemen wird sich das Programm schon melden. Die Konflikte sind dann später in WinMerge von Hand aufzulösen. Generelle Hilfe zu beiden Programmen gibt es mit "diff.exe --help" respektive "patch.exe --help". Seitenansicht erhält man, wenn man ein " | more" anhängt ("patch.exe --help | more").

Das zweite Bild zeigt wie ein solches Diff-File aufgebaut ist und zur besseren Darstellung hebt Notepad2 das wichtigste hervor. Ich denke das ist weitesgehend selbsterklärend. Rote Blöcke werden durch die grünen ausgetauscht.

embedded image

embedded image

Während des Patchdurchlaufes sieht man dieses:

embedded image

Sofern keine Fehler aufgetreten sind, sollten jetzt alle Änderungen eingespielt sein. Mit WinMerge können wir das überprüfen. Alle Dateien sollten nun als "identisch" deklariert werden. Tun sie das nicht, mag das an unterschiedlichem Zeilenumbruch liegen. Dann werden die Dateien beim Vergleich mit Doppelklick als roter Block angezeigt, obwohl der Text identisch ist. In den Optionen des Programms kann man die unterschiedlichen Zeilenumbrüche ignorieren. Nach eine Aktualisierung mit F5 sollten die Dateien schlußendlich "identisch" sein.

embedded image

Vorgefertigte Patchdateien sind beim sf.net-Server zu finden. Sie enthalten die Änderungen seit der jeweils letzten Version im Unified-Format.

Fragen, Anmerkungen und Fehler bitte per E-Mail, PN oder in einem gesonderten Beitrag! Wie immer ;-)

Seite: 1

Copyright (c) by "archilles scriptworld Forum", 2009. All rights reserved.
This archive has no free license, but any copyright laws applicable by your local country.