Zwei Trac Installationen zusammenführen

Als ich vor einiger Zeit ein bisschen mit trac gespielt habe, habe ich zwei Umgebungen (Enviroments) aufgesetzt. Eine für The Kingdom of Darkness und eine für den dazu gehörigen Editor. Das hat sich jetzt im Nachhinein als eine blöde Idee herausgestellt, weil die beiden Projekte sich zu nah sind, und man doch immer wieder die Inhalte aus dem anderen Wiki braucht.

Also wollte ich die beiden zusammenführen. Bei mir ging das ziemlich einfach, darum gibt es jetzt hier eine kleine Anleitung: (Wie immer: Auf eigene Verantwortung, macht ein Backup)

Als erstes muss man sich überlegen, was man denn überhaupt alles zusammenfassen will. Folgendes kommt in Betracht:

  • Wiki – Eine der leichteren Übungen, wenn es denn nicht zwei Seiten mit dem gleichen Namen in beiden trac’s gibt.
  • Benutzer – Hier hängt das Vorgehen von der Autorisierungsmethode ab, das muss jeder selber wissen.
  • Dateien (Anhänge) – Auch sehr leicht zu machen, wenn es nicht identische Dateinamen gibt
  • Repositorys – sollte machbar sein. Trac kann mit mehr als einem Repository umgehen, oder man fasst die beiden einfach zu einem zusammen. Hier muss man sehen, was das VSC da her gibt.
  • Changesets – unproblematisch
  • Meilensteine, Versionen, etc. Machbar, erfordert aber etwas Handarbeit bzw. Suchen und Ersetzen
  • Einstellungen/Plugins – Auch machbar, erfordert aber natürlich Handarbeit.
  • Tickets – Das ist schwierig. Jede Installation fängt bei 1 an zu zählen, also kollidieren die Nummern. Entweder muss man die Nummern alle um einen Wert erhöhen (wodurch alle Links in Leere laufen), oder, wenn man nicht so viele hat, versuchen, die Tickets des einen möglichst auf die IDs des anderen zu legen, die schon erledigt sind. Damit sind die dann natürlich verloren. Erfordert in beiden Fällen etwas Handarbeit.

So nun gehts los. Wir arbeiten uns von einfach nach schwer durch. Als erstes sollte natürlich die Website offline gehen, das kann sonst zu Problemen führen.

Die einfachste Sache sind die Anhänge, denn die liegen einfach im Order /attachments der trac-Umgebung. Die werden einfach in die Ziel-Umgebung kopiert.

Die restlichen Daten legt trac in der Datenbank ab. Die meisten werden wohl eine lokale SQLite-Datenbank verwenden, für andere Typen sollte es analog funktionieren. Die wichtigsten Tabellen sind dabei wiki, attachment und ticket. Wir es hier vorgeschlagen wird, werden die Tabellen einfach exportiert, und in die Zieldatenbank wieder eingelesen.

Wer Debain oder ähnliches benutzt, kann dafür das Paket sqlite3 installieren, und diese Befehle benutzen. (Im Wurzelverzeichnis der Quellumgebung)


sqlite3 ./db/trac.db ".dump wiki" > wiki.sql

sqlite3 ./db/trac.db ".dump attachment" > attach.sql

sqlite3 ./db/trac.db ".dump ticket" > ticket.sql

cd ../zieltrac

sqlite ./db/trac.db ".read wiki.sql"

sqlite ./db/trac.db ".read attach.sql"

sqlite ./db/trac.db ".read ticket.sql"

Die Anhang-Tabelle sollte dabei fast keine Fehler produzieren, angesehen davon das sie schon existiert. Das Wiki wird ein paar Fehler werfen, weil in jedem trac eine Menge an Wiki-Seite von vornherein existieren, die dann zu Problemen führen. Am besten man schlägt die Zeilennummern in der Dump-Datei nach, um zu sehen, um welche Seite es sich handelt. Wenn doch eine Seite doppelt ist, kann man einfach in der SQL-Datei den Namen ändern (für alle Revisionen), und die Seite sollte dann unter dem Namen zu finden sein.

Was die Tickets betrifft muss sich jeder etwas überlegen, wie ich es oben schon angedeutet hatte. Am schmerzlosesten dürfte es noch sein, einfach alle Ticketnummern um eine gewisse Zahl zu erhöhen, bzw. einfach aus dem Dump zu löschen, dann müsste SQLite neue vergeben.

Wer auch die Änderungen an den Tickets mit Übernehmen will, muss sich dazu die Tabelle ticket_change ansehen, und sich etwas überlegen, um die Nummern passend zurechtzubiegen.

Der Rest ist fast komplett über die Weboberfläche machbar. Wenn es nicht zu viele Meilensteine, Versionen, etc. sind, kann man die einfach per Interface wieder anlegen, und dann per Hand oder Suchen und Ersetzen im Dump den Tickets zuweisen.

Die Repositorys kann man einfach hinzufügen, dann evtl. noch den post-commit Hook anpassen, und ein Resync durchführen. Damit sollten alle Changesets an der richtigen Stelle liegen. Als letztes muss man sich jetzt noch überlegen, ob man noch Plugins usw. übernehmen will, da muss dann halt einfach neu installiert werden.

Wer nicht mit der Konsole hantieren will, dem sei dieses Firefox-Plugin empfohlen: SQLite Manager. Damit kann man direkt in Firefox SQLite-Dateien editieren. Ich hab noch ein paar Bilder gemacht, die den Prozess erklären sollten:

Fazit: Es ist erstaunlich leicht, auch dank dem guten Datenbank-Design von trac. Und: Neustarten von trac nicht vergessen, sonst wird man die Änderungen nicht sehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.