1 Die Entwicklung von Thera-Pi benutzt derzeit ein CVS auf Sourceforge. Um die Daten in Git zu übernehmen, wird cvs2git verwendet. Dazu wird zuerst mittels `rsync` eine Kopie des CVS-Repositorys geholt. Das Skript erzeugt dabei eine Sicherheitskopie des vorherigen Standes.
3 **`thera-pi-rsync.sh`**
7 if [ -d thera-pi-cvs-rsync ]
9 rm -rf thera-pi-cvs-rsync.old
10 mv thera-pi-cvs-rsync thera-pi-cvs-rsync.old
12 mkdir thera-pi-cvs-rsync
14 rsync -av rsync://thera-pi.cvs.sourceforge.net/cvsroot/thera-pi/ .
16 Aus der CVS-Kopie werden mittels cvs2git die Daten für einen Import in Git extrahiert. Da das CVS nur die Sourceforge-Benutzernamen enthält, werden diese mit dem Skript `thera-pi-rewrite-committer.awk` modifiziert. Vor dem Import in Git wird das Repository als Tar gesichert, für den Fall, daß Fehler auftreten.
18 Im Thera-Pi-CVS scheint inzwischen ein Fehler aufgetreten zu sein: Eine Datei `AltImport.java,v` befindet sich sowohl im Attic als auch im darüberliegenden Verzeichnis. Das ist eigentlich nicht zulässig, deshalb bricht das Import-Programm wegen des Fehlers ab. Also muß eine der Dateien beseitigt werden. Da die Datei im Attic aktueller zu sein scheint, wird die andere Version gelöscht.
20 **`thera-pi-cvs2git.sh`**
25 # fix for specific file
26 if [ -f thera-pi-cvs-rsync/RehaUrlaub/src/rehaUrlaub/AltImport.java,v ] && [ -f thera-pi-cvs-rsync/RehaUrlaub/src/rehaUrlaub/Attic/AltImport.java,v ]
28 rm thera-pi-cvs-rsync/RehaUrlaub/src/rehaUrlaub/AltImport.java,v
31 cvs2git --blobfile=$HOME/git-blob.dat --dumpfile=$HOME/git-dump.dat --username=cvs2git --encoding=utf8 --encoding=latin1 --encoding=cp1252 ~/thera-pi-cvs-rsync || exit $?
32 $HOME/thera-pi-rewrite-committer.awk $HOME/git-dump.dat > $HOME/git-dump-new.dat || exit $?
33 rm -f thera-pi-from-cvs.git.tar.gz
34 tar cvzf thera-pi-from-cvs.git.tar.gz thera-pi-from-cvs.git || exit $?
35 cd thera-pi-from-cvs.git || exit $?
36 cat $HOME/git-blob.dat $HOME/git-dump-new.dat | git fast-import || exit $?
38 Das folgende Skript ersetzt die Sourceforge-Benutzernamen als Committer durch Realnamen (soweit bekannt) und Sourceforge-E-Mail-Adressen. Die Realnamen wurden den Profil-Informationen auf Sourceforge bzw. dem Thera-Pi-Forum entnommen. Die E-Mail-Adressen wurden schematisch gebildet und nicht auf Gültigkeit überprüft. (Es sind möglicherweise auch Benutzernamen enthalten, die nicht im Thera-Pi-CVS vorkommen.)
40 **`thera-pi-rewrite-committer.awk`**
46 if(($1 == "committer") && ($3 == email)) {
47 $3 = "<" $2 "@users.sourceforge.net>";
50 $2 = "Bodo Meissner"; break;
52 $2 = "Christian Breuning"; break;
54 $2 = "Ernst Lehmann"; break;
56 $2 = "Alexander Gross"; break;
58 $2 = "Jann-Henrik Pflueger"; break;
60 $2 = "Oliver Behmer"; break;
62 $2 = "Pit Palme"; break;
64 $2 = "Ralf Kramer"; break;
67 $2 = "Juergen Steinhilber"; break;
69 $2 = "Bianca Orth"; break;
74 if(!known) print "WARNING: unknown user " $2 > "/dev/stderr"
81 Nach diesem Ablauf befindet sich in `thera-pi-from-cvs.git` eine (leicht modifizierte) Kopie des CVS. Bisher gab es keine Konflikte bei der wiederholten Ausführung des Ablaufs. Das Git-Repository wurde jeweils mit den Änderungen aus dem CVS aktualisiert. Dieses Git-Repository wird auf Github übertragen als `bomm/thera-pi`. Darin werden keine anderen Änderungen vorgenommen, weil im Fall von Fehlern beim Import-Ablauf möglicherweise das gesamte Repository verworfen und neu erstellt werden muß.
83 Das Repository `bomm/thera-pi-2` ist im Prinzip ein Fork von `bomm/thera-pi`. (Nur anders realisiert, weil man bei Github keinen Fork von einem eigenen Projekt erlaubt.) Der `master`-Zweig soll immer dem CVS entsprechen. Vom CVS unabhängige Änderungen werden nur in anderen Zweigen vorgenommen.