Framework

Gestion de configuration de PHPBoost

Table des matières

Introduction



En novembre 2010, le code source de PHPBoost a été migré du gestionnaire de configuration Subversion à Mercurial.

Système de gestion de configuration décentralisé



Cet outil appartient à la dernière génération de gestionnaires de configuration alors que Subversion date de la génération précédente. En effet, Mercurial a pour principale caractéristique d'être décentralisé, ce qui signifie qu'il n'y a pas un dépôt avec des copies de travail synchronisées sur ce dépôt comme avec SVN mais chaque copie de travail est elle-même un dépôt, il n'y a pas de distinction entre un dépôt serveur et un dépôt client. Cependant, il y a forcément un dépôt qui joue le rôle de serveur, celui qu'on appelle dépôt d'intégration à partir duquel tous les participants au projet se synchronisent. Pour ce qui concerne PHPBoost, ce dépôt est hébergé sur Google Code.

Un gros gain de temps



Avec SVN, quand un projet contient une certaine quantité de code, les opérations de synchronisation avec le serveur deviennent rapidement longues. Ceci s'explique par le fait que Subversion travaille fichier par fichier et fait autant de requêtes au serveur qu'il y a de fichiers pour certaines opérations. La latence du réseau fait que même avec une machine puissante et une liaison haut débit, l'utilisation n'est pas toujours confortable.
Mercurial contourne ce problème en regroupant toute l'opération qu'il a à faire avec le serveur en une seule requête. Ainsi, lorsque la masse de code augmente, les requêtes envoyées sont lourdes mais peu nombreuses, ce qui est beaucoup plus performant en terme de temps.

D'autres fonctionnalités bien utiles



Mercurial propose d'autres fonctionnalités modernes que Subversion ne propose pas. C'est par exemple le cas du support natif des branches.
Les branches sont utilisées lors de lourdes modifications qui ont un impact sur l'intégrité du logiciel. L'objectif est que le code du dépôt soit systématiquement fonctionnel pour que chacun puisse travailler sans souci. Mais lorsqu'on se lance dans de gros chantiers, on peut déstabiliser le code contenu dans le dépôt et empêcher les autres de travailler.
Le concept de branche consiste à créer une copie du dépôt avant de lancer le chantier et de travailler uniquement sur cette copie. Durant tout le développement, les autres personnes qui travaillent sur le vrai dépôt ne sont pas affectées par les modifications. Une fois le chantier terminé, les gestionnaires de configuration proposent des outils de fusion qui permettent de répercuter sur la branche principale les modifications faites dans la branche, en évitant ou au moins limitant les interventions manuelles durant l'opération.
La branche principale est appelée tronc ou trunk en anglais. Celle-ci doit toujours se trouver dans un état stable.

Subversion supporte le concept de branche, mais cela nécessite de créer une copie du répertoire trunk du dépôt ailleurs dans le dépôt. Il faut ensuite changer l'URL du serveur de la copie locale pour lui indiquer qu'elle travaille désormais avec la branche. Tout ceci est couteux en temps et pose souvent des problèmes.
Mercurial supporte nativement la notion de branche. Un dépôt est composé de branches et la création d'une branche ou le changement de branche ne prennent que quelques secondes. Il est donc beaucoup plus aisé d'avoir une méthode travail plus saine avec un tel outil.

Il est à noter que Mercurial n'est pas le seul outil de dernière génération à proposer ces fonctionnalités. Il existe entre autres Git qui est un des plus connus et qui a été développé par Linus Torvald pour gérer le code source du noyau Linux. Notre choix s'est porté sur Mercurial notamment parce que le code de PHPBoost est depuis longtemps hébergé chez Google Code et que ce service supporte SVN et Mercurial et pas Git.

Installer Mercurial



Mercurial est un système de gestion de configuration open source disponible sur les plateformes les plus courantes (Windows, Mac, Linux).

En ligne de commande, la commande hg prend en charge toutes les fonctionnalités de Mercurial (hg car le symbole en physique du mercure est Hg). Sur Linux, elle est souvent intégrée dans le gestionnaire de paquets, c'est le cas sur Ubuntu où il faut installer le paquet mercurial.

Pour installer Mercurial dans Eclipse, c'est également assez simple, il faut aller dans le Market (Help -> Eclipse MarketPlace), rechercher mercurial et installer Mercurial Eclipse. Après avoir redémarré Eclipse, vous pourrez utiliser Mercurial.

Sous Windows, il existe TortoiseHg qui est plus ou moins l'équivalent à TortoiseSVN. C'est une interface graphique qui s'intègre à l'exportateur Windows et simplifie grandement l'utilisation d'un tel outil.

Utiliser Mercurial



Récupérer une copie locale du dépôt



Avec Subversion, pour récupérer une copie du dépôt on faisait un checkout. Avec Mercurial, dans la mesure où toutes les copies de travail sont des dépôts, il faut faire un clone du dépôt maitre, en utilisant la commande clone.

Une fois le clone terminé (il peut prendre un certain temps car il télécharge l'historique entier du dépôt), la copie de travail est opérationnelle.

Pour récupérer le code de PHPBoost, il faut lancer la commande suivante :
Code BASH :
hg clone http://phpboost.googlecode.com/hg/ phpboost


Mettre à jour son dépôt



Lorsqu'on souhaite se mettre à jour par rapport au dépôt maitre car quelqu'un y a effectué des modifications, avec SVN il faut faire un update. Avec Mercurial, c'est un peu plus compliqué et il faut procéder en deux étapes. Tout d'abord, c'est la commande pull qu'il faut utiliser, elle signifie littéralement tirer et consiste à rapatrier les changements faits dans le dépôt distant sur le dépôt local.
Attention, à ce stade-là, les métadonnées de la copie locale sont à jour par rapport au dépôt local mais l'arborescence des fichiers n'est pas mise à jour.

Il faut ensuite demander à Mercurial de mettre à jour la copie de travail. La commande update permet de le faire, mais il faut lui préférer merge qui va tenter de résoudre les conflits autant que possible sans intervention humaine.

Code BASH :
# Rapatriement des modifications distantes sur le dépôt local
hg pull
# A ce stade-là l'arborescence de la copie locale n'a pas changé
# Application des modifications distantes sur la copie locale
hg update
# On a maintenant un résultat équivalent à svn update


Propager ses modifications



Avec SVN, il suffisait de faire un commit pour propager ses modifications sur le serveur. Avec Mercurial, étant donné que la copie de travail est elle-même un dépôt, la commande commit existe également mais elle propage les modifications dans le dépôt local, le dépôt du serveur n'étant pas du tout affecté lors d'une telle opération.
Pour ce faire, il faut exécuter la commande push (pousser) qui va répercuter les modifications sur le dépôt distant. Attention, la granularité de cette opération n'est pas le fichier mais la révision : on pousse des révisions sur le dépôt de la même façon qu'on tire des révisions quand on fait un pull.

Ainsi, pour propager ses modifications sur le serveur il faut faire :
Code BASH :
# Sauvegarde de l'état du dépôt local en créant une révision
hg commit
# Jusqu'à présent le serveur n'a reçu aucune modification
# Propagation de la révision créée localement sur le serveur
hg push


Il est bon de remarquer qu'il n'est pas nécessaire de faire un push après chaque commit. En effet, push ne sert qu'à synchroniser le dépôt local avec le dépôt distant. Ainsi, lorsqu'on fait une grosse opération, on peut faire plusieurs commits en local, de manière à avoir plusieurs sauvegardes de la copie de travail à un instant donné, et on peut se permettre de commiter du code instable puisqu'il n'impactera que le dépôt local. Après une série de commits qui permettent de résoudre le problème, on peut pousser toutes les modifications sur le dépôt principal et livrer ainsi une version fonctionnelle sans avoir mis le dépôt principal dans un état instable.

Les plus perspicaces auront remarqué que Mercurial permet de travailler normalement même si on n'a pas accès au serveur dans la mesure où on a sur sa machine un véritable dépôt. L'opération commit ne nécessite pas de connexion internet. Il est possible de travailler plusieurs jours en local et de pousser ses modifications dès qu'on retrouve une connexion internet (et en profiter au passage de tirer les modifications des autres dans son propre dépôt).

Ressources



Tutoriel très clair : http://hginit.com
Mercurial Definitive Guide : http://hgbook.red-bean.com/read/
Cette page a été vue 2270 fois