DPotW: dpatch
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!
Comments
Display comments as Linear | Threaded