Innhold
1 Splitting av kode
Vi har etter diskusjon i tenestegruppa kome fram til at alt som ikkje er direkte avhengig av Cerebrum-koden skal splittast ut frå Cerebrum-repoet og leggast i eigne git-repo i Stash (https://utv.uio.no/stash).
Det vi skal splitte ut frå Cerebrum-repoet:
- Brukerinfo: Frå cerebrum/clients/brukerinfo. Fullført.
- cweb: Frå cerebrum/clients/cweb. Fullført.
- CisClient: Frå cerebrum/clients/cis. Fullført, kalla CisClient.
- JBofh: Frå cerebrum/clients/jbofh. TODO: Krever at oppsettet for å byggen den vert oppdatert. Let den difor bli i repoet enn så lenge.
- Individuation: Frå cerebrum/clients/web/individuation.
- phplib: Frå cerebrum/clients/web/phplib. Fullført.
- Password: Frå cerebrum/clients/web/password. Fullført, kalla PasswordClient.
- Postmaster: Frå cerebrum/clients/web/postmaster. Fullført, kalla PostmasterWebclient.
- Individuation: Frå cerebrum/clients/web/individuation. Fullført.
- AD-service: Frå cerebrum/servers/ad. Treng å oppdatere dokumentasjonen om dette samtidig.
Vi treng å sjå over kva vi skal gjere med enkelte delar:
- ceresync - Utvikla av NTNU, ikkje oppdatert sidan 2010. Usikker på om det er behov for dette hos UiO, eller om det berre skal slettast.
- cereweb - Utvikla av NTNU, ikkje oppdatert sidan 2010. Usikker på om det er behov for dette hos UiO, eller om det berre skal slettast.
- servers/cerews - Utvikla av NTNU, ikkje oppdatert sidan 2010. Usikker på om det er behov for dette hos UiO, eller om det berre skal slettast.
- `clients/examples/` - Usikker på om vi skal slette denne, eller kopiere filene inn i andre repo?
- cerebrum/doc/ - Vi har ikkje konkludert med korleis vi ønsker å ha dokumentasjonen for Cerebrum framover, så usikker på kva vi skal gjere med dette. Det er i tillegg nokre mapper under her som tilhøyrer kode som er splitta ut i eigne repo. Desse bør flyttast over, men mest sannsynleg er det enklare å uførte etter migreringa.
- servers/ephorte/ - Usikker på kor tilknytta Cerebrum-koden denne er. Skal uansett gå ut av produksjon innan sommaren 2014.
Det er også nokre repo under git.uio.no som skal flyttast til Stash:
- Bilagslønn. TODO: Ikkje flytta endå.
- phplib2. Flytta til Stash, men repo er ikkje sletta frå git.uio.no endå.
- Alumni. Flytta til Stash, men repo er ikkje sletta frå git.uio.no endå.
2 Migrering av koden
For å migrere koden over frå svn til git følger vi git-scm.com sitt kapittel Git and Other Systems - Migrating to Git som utgangspunkt. Prosessen vert då:
- Lag mapping av utviklarar, frå brukarnamn i svn til fullt namn og e-postadresse i git. Det har vore ein del utviklarar frå tidlegare tider, så det kan hende vi treng å grave litt før vi finn ut kven alle er.
- Sjekk ut koden lokalt gjennom git svn clone. Dette tek tid, så det bør optimaliserast.
- Push koden til Stash.
2.1 Mapping av utviklarar
Vi henter ut lista over alle registrerte brukarnamn frå svn:
svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
Denne lista er sjekka inn i cerebrum_sites/etc/svn_authors.txt for vidare bruk. Etter migreringa trengs ikkje fila lenger. Døme på formatet til kvar linje:
jazz = Jasmina Hodzic <jazz@usit.uio.no>
Lista er blitt forsøkt oppdatert med riktige namn, men denne kan vere mangelfull. I verste fall vil ikkje dei vi kjenner til få fullt namn eller riktig registrert e-postadresse i nytt Git-repo.
2.2 Optimalisering
Kloninga til git vha. git svn clone vil ta tid. Det er anbefalt litt optimalisering ved å speile repoet lokalt, og bruke tmpfs for kjappare lesing og skriving til filer.
Lag ein kopi (mirror) av svn-repoet lokalt, for å unngå nettverkstrafikk. Kommandoar for dette:
TODIR=/tmp/cerebrum_mirror svnadmin create $TODIR echo '#!/bin/sh' > $TODIR/hooks/pre-revprop-change chmod 755 $TODIR/hooks/pre-revprop-change svnsync init file://$TODIR svn+ssh://svn.uio.no/svnroot/cerebrum svnsync --non-interactive sync file:///$TODIR
Deretter kan du heller bruke dette repoet når du migrerer i staden for å bruke svn.uio.no direkte. Køyringa tek rundt 3 timar første gangen, men du kan køyre den siste kommandoen fleire ganger for å få inn seinare revisjonar, om det har dukka opp meir sidan sist forsøk:
svnsync --non-interactive sync file:///$TODIR
Mount mappa du skal lage den git-migrerte kopien i til tmpfs:
mkdir /tmp/cerebrum-stash sudo mount -t tmpfs tmpfs /tmp/cerebrum-stash
Mappa vil då berre ligge i minnet og ikkje på disk, og vil difor vere meir effektiv å lese og skrive til.
Du er då klar til ei litt meir effektiv migrering.
2.3 Utskilling av andre tenester i eigne repo
Det er ønskeleg å rydde opp i repoet før vi migrerer, og vi skiller difor ut ulike system og tenester i eigne git-repo. Det er enklare å gjere dette før enn etter migreringa av Cerebrum-koden, så vi bruker litt ekstra tid på å få gjort dette først.
Utskillinga gjerast ved å køyre git svn clone på undermappa i cerebrum-repoet som det gitt systemet høyrer heime. Kommandoen for dette er typisk:
git svn clone --no-metadata \ --authors-file=$HOME/src/cerebrum_sites/etc/svn_authors.txt \ file:///tmp/cerebrum_mirror/trunk/cerebrum/clients/systemX \ /tmp/cerebrum-systemX
Til dømes, for Brukerinfo:
git svn clone --no-metadata \ --authors-file=$HOME/src/cerebrum_sites/etc/svn_authors.txt \ file:///tmp/cerebrum_mirror/trunk/cerebrum/clients/brukerinfo \ /tmp/brukerinfo
Etter kloninga sender ein det til eit nyoppretta repo i Stash, med git push på vanleg måte.
Når Cerebrum drift har oppgradert det gitte systemet til å bruke git, kan det slettast frå svn-repoet. Under migreringa av Cerebrum-koden må ein deretter hugse å fjerne denne mappa før ein sender repoet til Stash, slik at ein unngår at filer og historikk befinner seg både i cerebrum-repoet og det gitte systemet sitt repo.
2.4 Migrering av Cerebrum
Kommandoen for kloninga av koden:
git svn clone --no-metadata -T trunk/cerebrum \ --authors-file=$HOME/src/cerebrum_sites/etc/svn_authors.txt \ file:///tmp/cerebrum_mirror /tmp/cerebrum-stash
Ei kloning tek rundt 45 minutt.
Merk at parametera for tags (-t --tags) og branches (-b) er ikkje blitt brukt, då vi ikkje har behov for dei som er registrert i svn. Dei fleste branches er gamle og utdaterte, og det er i hovudsak NTNU UiT som har brukt tags. Vi tek difor ikkje med dette i migreringa. Ein eller to branches må takast manuelt etterpå.
Slett det som har blitt migrert ut av Cerebrum-repoet og inn i eigne repo og anna vi ikkje treng:
git stash git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch \ clients/brukerinfo clients/web clients/cweb clients/cis \ clients/jbofh clients/web-jokim servers/ad' HEAD
Dette tek rundt 15 minuttar å køyre på ei oppegåande kontormaskin.
2.4.1 Push til Stash
For å pushe til Stash må du først opprette eit nytt, tomt repo i Cerebrum-prosjektet, evt. slette det gamle test-repoet, for deretter å køyre:
git remote add origin ssh://git@utv.uio.no:7999/crb/cerebrum.git git push origin --all
Dette vert då den nye lokasjonen.