20090715 Moving from berlios.de to code.google.com

Jahrelang war ich glücklich mit dem SVN-Repository von berlios.de. Aber jetzt habe ich ein Problem, wo ich keine Lösung sehe. Vielleicht habe ich auch nicht genug gesucht, weil ich sowieso seit einiger Zeit Lust hatte, nach code.google.com umzusteigen.

Mein Problem bei berlios.de ist, dass svn ci seit einer Woche immer nur sagt:

(...)
Sending        src\mysites\demo\urls.py
Transmitting file data ................................
svn: Commit failed (details follow):
svn: Connection closed unexpectedly

Ich habe ein ssh -l lsaffre svn.berlios.de versucht und dort svnadmin verify und svnadmin recover gemacht:

lsaffre@sheep:~> svnadmin verify /svnroot/repos/lino
lsaffre@sheep:~> svnadmin recover /svnroot/repos/lino

Die funktionieren zwar und melden keine Fehler, aber es ändert nichts.

Ich vermute, dass es daran liegt, dass ich mit einer recht alten Version des SVN-clients garbeitet hatte (ich arbeite noch immer auf Windows und Subversion wird dort nicht automatisch aktualisiert). Ich hatte mit Subversion 1.4 gearbeitet. Kann sein, dass deshalb was kaputt gegangen ist.

Beschluss: Ich wechsle nach Mercurial und code.google.com. Die Anweisungen (wenn man wie ich die Historik mit importieren will) sehen auf http://code.google.com/p/support/wiki/ConvertingSvnToHg relativ kompliziert aus, aber in der Praxis geht das relativ einfach, wenn man einen Rechner mit aktuellem Linux zur Hand hat. Zuerst die nötigen Packages installieren:

aptitude install subversion
aptitude install mercurial
aptitude install python-subversion
aptitude install svn-workbench

Dann zuerst ein hg convert:

luc@jaama:~$ mkdir hg-client
luc@jaama:~$ hg convert svn://svn.berlios.de/lino/trunk hg-client
initializing destination hg-client repository
scanning source...

(und dann ein langer download)

Und nach über einer Stunde:

(...)
7 using appy.pod to print invoices
6 started lino.django.apps.documents
5 wip: printing invoices using pisa
4 wip: printing invoices using pisa
3 printing invoices using pisa, with logo.jpg
2 release to tups (print invoices using pisa)
1 sorry()
0 m
luc@jaama:~$

Fertig! Jetzt habe ich also ein lokales Hg-Repository von Lino, mit 735 changesets. Das muss ich jetzt nach google pushen:

luc@jaama:~$ cd hg-client/
luc@jaama:~/hg-client$ hg push https://lino.googlecode.com/hg
pushing to https://lino.googlecode.com/hg
searching for changes
http authorization required
realm: Google Code Mercurial Repository
user: user.name@gmail.com
password:

Probleme:

  • Broken pipe on large push http://code.google.com/p/support/issues/detail?id=2716

  • Welches Passwort? Nicht mein eigenes Google-Passwort, sondern das generierte Passwort, das ich auf meinem Profiel finde: http://code.google.com/hosting/settings

  • Wie konnfiguriere ich hg, dass er mich jetzt nicht 735 mal nach meinem Passwort fragt? Die Anweisungen im Mercurial FAQ sind etwas kurz. Änderungsvorschlag:

    4.19. How can I store my HTTP login once and for all ?

    Hg lets you specify the username and password in the URL like:

    To avoid typing this long URL each time, create an alias for it in the [paths] section of your hgrc file:

    [paths]
    example = http://user:password@example.org
    

    With Mercurial 1.3 you can…

  • Nachdem das hg push geklappt hat, kann ich ein erstes Resulat bewundern: http://code.google.com/p/lino/source/browse/ zeigt alles schön an. Zumindest den letzten eingecheckten Stand der Dinge, vom 07. Juli.

    Die Änderungen nach dem 07.07. konnte ich ja bei berlios.de nicht mehr einchecken, die muss ich jetzt wohl oder übel manuell in mein hg-work einbauen.

    Aber zunächst stelle ich fest, dass hg status alle Dateien mit einem Fragezeichen davor ausflistet. Da stimmt was nicht. Aber der Repository ist nicht korrupt:

    luc@jaama:~/hg-client$ hg verify
    checking changesets
    checking manifests
    crosschecking files in changesets and manifests
    checking files
    3207 files, 735 changesets, 8916 total revisions
    

    Hmm… das hg-work auf jaama ist mir ja eigentlich egal, das war nur tempor岮 Ich probiere mal ein clone auf Armand:

    T:\hgwork>hg clone https://lino.googlecode.com/hg/ lino
    T:\hgwork\lino>cd lino
    T:\hgwork\lino>hg update
    0 files updated, 0 files merged, 0 files removed, 0 files unresolved
    
    T:\hgwork\lino>hg st
    T:\hgwork\lino>hg tip
    changeset:   734:37fadcd1aa1c
    tag:         tip
    user:        lsaffre
    date:        Tue Jul 07 10:26:51 2009 +0000
    summary:     m
    

    Sieht gut aus. Also fang ich mal an, die Äderungen der letzten zwei Wochen manuell in mein hgwork zu kopieren. Zum Glück funktioniert svn status noch in meiner SVN-Kopie, so dass ich eine Liste aller geänderten Dateien habe. Nach den ersten 7 mache ich einen Versuch:

    T:\hgwork\lino>hg st
    M src\lino\django\utils\layouts.py
    M src\lino\django\utils\menus.py
    M src\lino\django\utils\render.py
    M src\lino\django\utils\reports.py
    M src\lino\django\utils\sites.py
    M src\lino\django\utils\templates\lino\base.html
    M src\lino\django\utils\ticket7623.py
    

    Stimmt. Jetzt ein commit und ein push:

    T:\hgwork\lino>hg ci -m "two weeks of changes"
    T:\hgwork\lino>hg push lino
    pushing to https://luc.saffre:***@lino.googlecode.com/hg
    searching for changes
    Success.
    T:\hgwork\lino>
    

    Voilà, jetzt nur noch die restlichen Änderungen