lundi 7 février 2011

Migration de SVN vers Mercurial : Partie 3 Méthode Avancée, Utilisation des outils Mercurial

Activation de l'extension


Si Mercurial a la bonne idée de proposer des outils de conversion d'un système à un autre, ceux-ci ne sont pas activés par défaut.
Sur le site de Mercurial on peut lire que l'on peut configurer le logiciel par utilisateur en créant des fichiers de configuration dans le répertoire utilisateur.
Sous linux le fichier s'appelle .hgrc et se crée dans le dossier home de l'utilsateur. Habituellement ~/.hgrc permet de retrouver le fichier.
nano ~/.hgrc
Sous Windows Mercurial cherche le fichier Mercurial.ini là où pointe la variable %userprofile%
notepad %userprofile%/mercurial.ini

Je vous conseille ( comme celà est fait sur le site Mercurial) de renseigner un nom d'utilisateur. Dans le fichier de conf il suffit de créer la section [ui]. Pour activer l'extension permettant la conversion il faut ajouter hgext.convert=
Si l'extension n'est pas à l'endroit par défaut il faut taper hgext.convert=chemin/vers/lextension.py

[ui]
username=Fabien <fabien@techno-revue.fr>

[extensions]
hgext.convert=

TortoiseHg génère l'extension sans le préfixe hgext donc, si rajouter hgext ne fonctionne pas il faut essayer de l'enlever.
Pour générer ces paramètres avec TortoiseHg il faut faire afficher le menu contextuel ( clic-droit) pour voir apparaitre TortoiseHg. Dans le sous-menu une entrée global settings vous permet de définir les paramètres par défaut.


Pour activer l'extension convert dans TortoiseHg rien de plus simple, une fois dans les Global Settings il suffit d'aller dans la catégorie Extensions ( l'avant dernière ) et de cocher convert comme ci-dessous:

Paramétrages des données 

Mise en concordance des utilisateurs

Il faut pour se faire créer un fichier contenant les auteurs SVN et leur nouveau nom Mercurial ( s'ils changent bien entendu).
dans votre fichier ( que j'ai nommé auteurs.txt ) vous pouvez trouver des lignes comme celle-ci.
nomsvn=nommercurial <adresse@email.com>
ce qui donne dans mon cas
fab=Fabien <fabien@techno-revue.fr>
clem=Clément <clement@techno-revue.fr>
flow=Florian <florian@techno-revue.fr>

Gestion de l'inclusion ou de l'exclusion des fichiers


Vous pouvez également créer un fichier de mappage de fichiers.
On va l'appeler filemap.txt
Vous pouvez vous en servir pour exclure des fichiers. Par exemple des vidéos dont vous ne vous servirez plus
exclude *.avi
Le fichier n'est pas nécessaire si vous voulez tout inclure.

Gestion des branches et des tags


Là encore cette section n'est pas forcément utile, si vous n'utilisez qu'un tronc principal dans votre dépôt SVN sans même le mettre dans un sous-dossier trunk ou similaire.
Dans tous les autres cas vous allez sûrement apprécier ces petites fonctionnalités.
La plupart du temps sans SVN vous organisez votre dépôt en créant trois sous-dossiers nommés branches,tags et trunk.
Les options de conversion permettent de paramétrer chacun d'eux de la manière suivante :
--config convert.svn.branches=repo/branches ( si vous avez mis vos branches dans toto le chemin est repo/toto )
--config convert.svn.tags=repo/tags ( pareil si vous avez mis vos tags dans stable/libelle la config sera --config convert.svn.tags=repo/stable/libelle

--config convert.svn.trunk=repo/trunk ( votre répertoire de travail principal).

Une autre option pratique est --branchsort qui vous permet de trier les branches par révision pour gérer la notion de parent-enfant de branche sous-branche. Vous avez autrement la possibilité de mettre --datesort pour trier par ordre des révisions.

Paramètres supplémentaires


Si vous avez beaucoup de révision SVN et que ça ne vous intéresse pas de tout réimporter dans Mercurial vous pouvez également définir le paramètre --config convert.svn.startrev

Par exemple vous avez 8000 révisions et vous voulez garder les 2000 dernières.
--config convert.svn.startrev=6000
Je n'ai pas creusé l'option mais il y a également une option --branchmap qui permet à l'aide d'un fichier d'indiquer quelle branche SVN correspondra à quelle branche Mercurial

Migration effective


Maintenant que la migration est prête avec toutes les réglages et les options qui vont bien, il faut lancer le processus.
La première étape consiste à créer un dépôt mercurial, avec la commande suivante :
mkdir projet
cd projet
hg init
En gros il faut créer un dossier pour son projet et faire un hg init dedans pour créer le dossier .hg qui gérera tout votre dépôt.

Ensuite il n'y a plus qu'à lancer la commande de conversion.
hg convert --config convert.svn.trunk=repo/trunk --config convert.svn.tags=repo/tags --config convert.svn.branches=repo/branches --config convert.svn.startrev=6000 --filemap=chemin/vers/filemap.txt --authormap=chemin/vers/auteurs.txt --source-type=svn --dest-type=hg svn://MonRepoSvn chemin/vers/mon/projet

Une fois que les données sont bien moulinées, il faut aller dans le dossier de votre projet Mercurial et faire un commit puis un update et enfin un push vers un éventuel dossier distant.
hg commit
hg update
hg push https://neibaf@utils.techno-revue.fr/monrepo --insecure

Notez chez moi l'utilisation de l'option --insecure C'est parceque utils.techno-revue.fr est un alias pour bitbucket.org et le certificat SSL est celui de bitbucket.org. Du coup les outils mercurial affichent un message comme quoi le certificat n'a pas le bon nom de domaine et arrête la transaction.
Pour forcer ça il faut utiliser l'option --insecure.

Voilà, maintenant tout le monde est sur Mercurial!