Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mercurial Migration im großen Stil

Mercurial Migration im großen Stil

Ein paar SVN-Repositories sind schnell nach Mercurial migriert. Und das Entwicklerteam hat sich nach einer kurzen Einarbeitungszeit auch an das neue Versionskontrollsystem (VCS) gewöhnt. So oder so ähnlich kennen viele den Wechsel zu Mercurial. Was aber, wenn das alles alles im großen Stil geschieht?

Wie gestaltet man eine Migration von mehreren Dutzend Projekten und mehreren Hundert Repositories? Wie organisiert man den Umstieg bei großen Teams, die auch noch an verschiedenen Standorten weltweit arbeiten? Welche Vorteile bietet hier ein Distributed VCS? Wie importiert man die Daten aus einem Versionskontrollsystem (ClearCase), für dass es bis jetzt keine frei verfügbare Migrationssoftware gibt? Und wie betreibt man eine zentrale Platform zum Austausch der Teams?
Über diese und andere Fragen werde ich in meinem Vortrag über die Mercurial Migration bei Lantiq berichten.

Markus Zapke-Gründemann

October 06, 2011
Tweet

More Decks by Markus Zapke-Gründemann

Other Decks in Programming

Transcript

  1. Verteilte Versionskontrollsysteme • Kein zentrales Repository nötig (aber möglich) •

    Jeder Client hat ein eigenes Repository • Viele Operationen sind schneller als bei einem zentralen Repository • Führt zu anderen Entwicklungsmodellen
  2. hg

  3. Mercurial • Verteiltes Versionskontrollsystem • Mercurial v0.1 im April 2005

    • Fast vollständig in Python geschrieben • Plattformunabhängig • Erweiterbar (Extensions) • Einfach zu erlernen • Open Source (GNU GPL 2) - Version 0.1 unter 600 SLOC Python - Version 1.9.3 hat 52.656 SLOC Python (86% von 60.999 SLOC)
  4. • Weltweit agierendes Fabless-Unternehmen • Rund 1.000 Mitarbeiter • Hersteller

    hochintegrierter System on Chip-Lösungen • Etwa 20 Niederlassungen weltweit Lantiq Logo und Produktfoto © Copyright Lantiq - Ehemals Wireline Communications Division von Infineon Technologies - Alle xDSL-Varianten, VoIP, WLAN, FTTx oder Gigabit Ethernet - Auswahl der Standorte: Europa (Neubiberg, Duisburg, Villach, Riga und Yakum), Nordamerika (Bedford, MA und Milpitas, CA) sowie in Asien-Pazifik (Taipei, Singapur und Bangalore)
  5. Anforderungen • Angepasste Mercurial Distribution • Linux (verschiedene RHEL Versionen)

    • Windows (TortoiseHg) • Zentraler Mercurial Server mit LDAP Authentifizierung • Subrepositories • ClearCase Migration - Da die Repositories bei Lantiq oft sehr groß sind und aus vielen Modulen bestehen waren Subrepositories teil der Anforderung.
  6. Mercurial Distribution Red Hat Enterprise Linux • Environment Modules •

    virtualenv • Python 2.7 • fabric Windows • TortoiseHg • Verschiedene Mercurial Extensions • Angepasste Mercurial Konfiguration - RHEL 4.x und 5.x für 32 und 64 bit - http://modules.sourceforge.net/ - Nicht alle Mercurial Extensions liegen als Python Package vor - Linux Distribution im Einsatz als Client und Server
  7. Struktur der Linux Distribution /opt/ !"" mercurial # $"" 1.9.2

    # !"" bin # # $"" hg # !"" contrib # !"" etc # # $"" mercurial # # $"" hgrc # !"" linux40_64 # !"" linux50_32 # $"" linux50_64 # !"" bin # # !"" activate # # !"" hg # # !"" pip # # $"" python # $"" lib $"" modulesfiles $"" prog $"" mercurial !"" .version $"" 1.9.2 $ module load mercurial
  8. Mercurial Server • Apache • mod_authnz_ldap • mod_ssl • mod_proxy

    • mod_wsgi • mod_macro • hgweb • Supervisord • Munin
  9. Reverse Proxy Backend Projekt A Client Backend Projekt B Backend

    Projekt C SSL LDAP Auth. Supervisord WSGI + hgweb - Das Backend für jedes Projekt läuft unter dem Account des Projekts. - Die Projekt-Admins verwalten die Repositories selbst. - Jedes Projekt kann über 100 Repositories haben. - Jedes Backend kann eine andere Mercurial Version nutzen.
  10. Authentifizierung von Gruppen [web] allow_read = @unixgroup, james, @devs allow_push

    = @devs [web.groups] devs = john, lisa, paul, linda, @team1 - Entwicklung wurde von Lantiq bezahlt. - Code noch nicht veröffentlicht.
  11. ClearCase Migration • ClearCase Baseline ≈ Mercurial Tag • Migration

    von Baselines als Mercurial Revisions • Erstellung von neuen Branches möglich • importfs und cc_import Extensions
  12. """printparents Prints the parents of a given revision. """ from

    mercurial import util def printparents(ui, repo, node, **opts): """Print parent information""" ctx = repo[node] parents = ctx.parents() try: if opts['short']: ui.write('short %s %s\n' % (parents[0], parents[1])) elif opts['long']: ui.write('long %s %s\n' % (parents[0].hex(), parents[1].hex())) else: ui.write('default %s %s\n' % (parents[0], parents[1])) except IndexError: raise util.Abort('revision %s has only one parent' % node) cmdtable = { 'print-parents': (printparents, [('s', 'short', None, 'print short form'), ('l', 'long', None, 'print long form')], '[options] REV') } printparents.py
  13. Test printparents extension: $ echo "[extensions]" >> $HGRCPATH $ echo

    "printparents=" >> $HGRCPATH $ hg init r $ cd r $ echo c1 > f1 $ hg commit -Am 0 adding f1 $ echo c2 > f2 $ hg commit -Am 1 adding f2 $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo c3 > f3 $ hg commit -Am 2 adding f3 created new head $ hg merge 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg commit -m 3 $ hg print-parents tip default 33960aadc16f c3adabd1a5f4 $ hg print-parents 2 abort: revision 2 has only one parent [255] test-printparents.t