Migration de SVN vers Bazaar

Nizar nizar.kerkeni at gmail.com
Mer 8 Juil 11:33:51 UTC 2009


un autre volet intéressant ;)

Envoyé par Nizar via Google Reader : Migration de SVN vers Bazaar via
Planet Ubuntu Francophone - Accueil de Respawner le 07/07/09

Migrer d'un système de contrôle de version à un autre peut parfois être
utile. On peut distinguer deux raisons de migration :

- le besoin (pour des raisons de gestion du projet), et,
- l'envie (par préférence d'utilisation).
Le cas numéro 2 a été le mien. En effet, en développant de plus en plus
pour java-gnome, je me suis pris d'affection pour Bazaar. J'ai donc
décidé de migrer le code de gSplit de SVN à Bazaar sans perte de
données.

Pour rappel (ou pas), Bazaar est un système de gestion de versions
libre et décentralisé qui est développé par Canonical. Il est développé
avec le langage Python (qui est très utilisé par Canonical). Avant de
me lancer, j'ai passé de long moment sur un moteur de recherche bien
connu pour être sûr et certain que la migration se ferait sans aucune
perte.

Attention ! La suite de l'article a été réalisé grâce à Ubuntu Server
9.04 et avec le PPA de l'équipe de développement de Bazaar. Il faut
donc ajouter ce dépôt, non officiel, à la liste déjà existante. Ceci
peut donc être dangereux pour votre système.


1. Ajout du PPA de Bazaar et installation
Les informations sur le PPA se trouve sur cette page. Pour les
utilisateurs de Jaunty Jackalope, il faut ajouter les deux lignes
suivantes au fichier /etc/apt/sources.list :
deb http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main


Avant de mettre à jour la liste des dépôts et de procéder à
l'installation, il ne faut pas oublier de récupérer la clé du dépôt via
la commande suivante.
~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
8C6C1EFD

Maintenant, on peut installer les paquets bzr, bzrtools, bzr-svn, ssh
et openssh-server.

Petite mise au point avant de se lancer dans les joyeusetés. L'accès en
lecture au dépôt se fera via le protocole HTTP, l'accès en écriture se
fera via SFTP et en plus de tout ceci, on mettra en place Loggerhead
(pour voir les commits et le dépôt depuis un navigateur web).
2. Création du dépôt
Avant de créer le dépôt et d'y intégrer le code, il faut commencer par
créer un utilisateur qui aura droit d'accès en écriture et qui servira
notamment à commiter.
~$ sudo useradd --create-home --home-dir /var/local/bzr
--shell /usr/lib/sftp-server bzr
~$ sudo passwd bzr
~$ sudo su
~# echo '/usr/lib/sftp-server' >> /etc/shells

On ajoute via les commandes précédentes un utilisateur nommé bzr, qui
aura pour répertoire personnel /var/local/bzr (la racine du dépôt
Bazaar) et qui utilisera comme shell un serveur SFTP. Avec la deuxième
commande, on définit le mot de passe de l'utilisateur, il faut donc
veiller à entrer un mot de passe plutôt costaud car il sera demandé
lors de l'envoi d'une branche par exemple.

Maintenant, il faut que le serveur HTTP (Apache dans mon cas) puisse
avoir accès au dépôt. On crée et on édite alors le
fichier /etc/apache2/sites-available/bazaar puis on y met la ligne
suivante.
Alias /bzr/ "/var/local/bzr/"

Enfin, on recharge la configuration du serveur HTTP.
~$ sudo a2ensite bazaar
~$ sudo /etc/init.d/apache2 force-reload

À partir de maintenant, on doit pouvoir pusher une branche afin de
tester que l'upload et que le download fonctionnent.
~$ mkdir test_project
~$ bzr whoami "MoiMeme <mon_email at server.org>"
~$ cd test_project
~/test_project$ echo "public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}" > Test.java
~/test_project$ bzr init && bzr add
~/test_project$ bzr push --remember
sftp://bzr@server.org/var/local/bzr/test_project

Si ceci fonctionne (normalement oui), on peut essayer de checkout la
branche ensuite.
~$ bzr checkout http://www.server.org/bzr/test_project test
3. Migration du code du dépôt SVN vers Bazaar
Voilà la partie sensible dans laquelle il faut faire attention
pourtant, ce n'est pas beaucoup plus bête qu'une ou deux lignes de
commande. On commence par importer le code dans le dépôt. Ceci va en
plus recréer l'historique des versions. Comme Bazaar fonctione par
branche (chaque branche commence à la révsion 1), il se peut que des
différences dans la numérotation apparaissent.
~$ cd /var/local/bzr/
/var/local/bzr$ sudo bzr svn-import --trees --layout=trunk0
http://www.server.org/svn/ mon_projet
/var/local/bzr$ sudo chown -R mon_projet

À ce stade, le code doit normalement être disponible via Bazaar et
l'historique doit être complet. On peut le vérifier via la commande
suivante.
~$ bzr log http://www.server.org/bzr/mon_projet | more
4. Mise en place de Loggerhead
Loggerhead est une sorte de Trac mais en plus simple puisqu'il ne
comporte par les fonctions de Wiki, etc... Pour l'utiliser, on récupère
l'archive de la dernière version.
~$ wget
http://launchpad.net/loggerhead/1.10/1.10/+download/loggerhead-1.10.tar.gz

Il faut extraire l'archive dans /opt/.
~$ mv loggerhead-1.10.tar.gz /opt/
~$ cd /opt/ && sudo tar xzvf loggerhead-1.10.tar.gz
/opt$ rm loggerhead-1.10.tar.gz

Pour lancer Loggerhead facilement, on va copier le
fichier /opt/loggerhead/loggerheadd dans /etc/init.d/ puis le modifier
à notre guise. On modifira surtout les quelques variables du fichier
comme celles-ci :
SERVE_BRANCHES_CMD=/opt/loggerhead/serve-branches
LOG_FOLDER=/var/log/loggerhead
LOG_FILE=$LOG_FOLDER/loggerheadd.log
URL_PREFIX=/loggerhead
PORT=4155
BZRROOT=/var/local/bzr/mon_projet/

Il ne faut pas oublier de configurer le serveur HTTP pour qu'il utilise
Loggerhead via le module de proxy afin de se simplifier la vie par la
suite. On édite le fichier /etc/apache2/site-available/loggerhead puis
on y insère le code suivant.
<Location "/loggerhead/">
Order allow,deny
Allow from all
</Location>
ProxyPass /loggerhead/ http://localhost:4155/
ProxyPassReverse /loggerhead/ http://localhost:4155/

On active les modules de proxy ainsi que le nouveau site. Pour finir
par recharger la configuration de Apache.
~$ sudo a2enmod proxy
~$ sudo a2enmod proxy_connect
~$ sudo a2enmod proxy_http
~$ sudo a2ensite loggerhead
~$ sudo /etc/init.d/apache2 force-reload

Maintenant, on donne le droit d'exécution au script et on peut lancer
Loggerhead.
~$ sudo chmod +x /etc/init.d/loggerhead
~$ sudo /etc/init.d/loggerhead start


5. Conclusion
Cet article ne se veut pas comme référence mais fait le point sur une
technique qui a fonctionné pour moi. Si vous avez des améliorations ou
d'autres tutoriaux à recommander je suis preneur. Notamment pour
utiliser Bazaar à la mode bzr (en checkout) et bzr+ssh (en commit).

Ce que vous pouvez faire à partir de cette page :
- Vous abonner à Planet Ubuntu Francophone - Accueil à l'aide de Google
Reader
- Suivre l'actualité de tous vos sites favoris avec Google Reader
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://lists.ubuntu.com/archives/ubuntu-tn/attachments/20090708/c3d8d955/attachment.html>


Plus d'informations sur la liste de diffusion Ubuntu-tn