Dpatch ist
ein Tool, das einem Debian-Maintainer die Arbeit kolossal einfach macht.
- Patchsets können zusammen gehörend verwaltet werden
- Die Upstream-Sourcen bleiben unverändert, auch
wenn sie verändert werden
- Man braucht nur noch debian/ in einem Versionskontrollsystem
haben
- Die Anwendung von Patches kann zur Bauzeit kontrolliert werden
Beim Bau von debian-Packages ist das Unterverzeichnis debian/ die Domäne des Maintainers. Manchmal aber
muss er auch ausserhalb des Verzeichnisses Änderungen vornehmen. Klassisch tut er dies direkt, und die Änderungen
landen dann auch direkt im Debian-.diff.gz. Funktioniert, und verletzt nicht das Prinzip der “Pristine
Sources”, da das .tar.gz des Upstreams unangetastet bleibt.
Wenn man aber nun - z.B. bei einem besonders unkooperativen Upstream - viele Änderungen an der Software vornehmen
muss, wird das Verfahren schnell unübersichtlich. Man wird also die gesamte Package in ein Versionskontrollsystem
einchecken, und hat dann nur noch bei Upstream-Updates ungefähr unendliche Schmerzen. Jedenfalls, wenn man mit CVS nur
über eine lange Geschichte der Abneigung verbunden ist und beim mergen von Changes immer nur Zerstörung erzeugt. Auch
ist es bei diesem Ansatz schwer, zusammengehörige Änderungen auch zusammen zu verwalten, und für Änderungen, die nur
unter gewissen Umständen (z.B. auf gewissen Architekturen) notwendig sind, scriptet man sich einen Wolf.
Dpatch
löst einige dieser Probleme. Dpatch ist ein System, das es möglich macht, beim Packagebau automatisch Patches auf die
Package anzuwenden. Die Patches liegen dabei im Verzeichnis debian/patches. Über eine Steuerdatei kann
ausgewählt werden, welcher Patch angewendet werden soll, und die die Patches selbst ein Shellscript enthalten, kann
auch der Patch selbst entscheiden, ob er angewendet werden will oder nicht.
Dadurch, dass die Patches innerhalb des debian/-Verzeichnisses liegen, reicht es völlig aus, dieses
Verzeichnis unter eigener Versionskontrolle zu haben, was Upstream-Updates drastisch erleichtert. Man muss zwar immer
noch aufpassen, dass die eigenen Patches auch auf die neue Upstream-Version anwendbar sind, der ganze Prozess ist aber
um Längen übersichtlicher. Geeignete Build-Scripts (svn-buildpackage kann das zum Beispiel) können das
Upstream .tar.gz automatisch auspacken, so dass man auch diese Arbeit nicht manuell tun muss.
Auch die Erstellung und Pflege der Patches wird durch dpatch erleichtert. dpatch-edit-patch macht
Dir eine Arbeitskopie des aktuellen Verzeichnisses und gibt Dir eine Shell innerhalb dieser Arbeitskopie. Nachdem Du
Deine Änderungen gemacht hast und diese Shell beendest, werden die von Dir an der Arbeitskopie durchgeführten
Änderungen zu einem Patch zusammengeschnürt und an die richtige Stelle ins debian/-Verzeichnis geworfen. Auch
hier kann optional ein Upstream-.tar.gz ausgepackt werden. Feine Sache das, die obendrein auch noch dafür
sorgt, dass thematisch zusammengehörige Änderungen zusammen in einem Patchfile landen, das man dann auch benutzen
kann, um die Änderung an den Upstream weiterzureichen.
Dieser Artikel ist nicht so ganz uneigennützig: Ich bin Member des Dpatch Maintainer Teams, und eine neue,
erheblich erweiterte Version von Dpatch ist ab heute abend in Debian unstable. Please test!