Tippfehler
[thera-pi-2.wiki.git] / Datenübernahme-vom-CVS-in-Git.md
blobd0f32318dba8adc43750bdda84a92527c1822c30
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`**
5     #! /bin/sh
6     cd
7     if [ -d thera-pi-cvs-rsync ]
8     then
9        rm -rf thera-pi-cvs-rsync.old
10        mv thera-pi-cvs-rsync thera-pi-cvs-rsync.old
11     fi
12     mkdir thera-pi-cvs-rsync
13     cd 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`**
22     #! /bin/sh
23     cd  || exit $?
24     
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 ]
27     then
28       rm thera-pi-cvs-rsync/RehaUrlaub/src/rehaUrlaub/AltImport.java,v
29     fi
30     
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`**
42     #! /usr/bin/awk -f
43     {
44       known=0;
45       email="<" $2 ">";
46       if(($1 == "committer") && ($3 == email)) {
47         $3 = "<" $2 "@users.sourceforge.net>";
48         switch($2) {
49         case "bomm":
50           $2 = "Bodo Meissner"; break;
51         case "cbreuning":
52           $2 = "Christian Breuning"; break;
53         case "ernstlehmann":
54           $2 = "Ernst Lehmann"; break;
55         case "gross1":
56           $2 = "Alexander Gross"; break;
57         case "jannyp":
58           $2 = "Jann-Henrik Pflueger"; break;
59         case "obehmer":
60           $2 = "Oliver Behmer"; break;
61         case "pitpalme":
62           $2 = "Pit Palme"; break;
63         case "sonnenreich":
64           $2 = "Ralf Kramer"; break;
65         case "thera-pi":
66         case "steinhilber":
67           $2 = "Juergen Steinhilber"; break;
68         case "witchcorp":
69           $2 = "Bianca Orth"; break;
70         case "root":
71         case "uid339452":
72           known=1;
73         default:
74           if(!known) print "WARNING: unknown user " $2 > "/dev/stderr"
75           $3 = email; break;
76         }
77       }
78       print;
79     }
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.