Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Afficher un graphe des commits dans un dépôt Subversion

Première rédaction de cet article le 4 décembre 2007


Pour le chef de projet, pour les développeurs, ou pour les simples curieux, il peut être intéressant d'afficher un graphe des commits (consécration d'un fichier ou groupe de fichiers) dans un dépôt Subversion. C'est ce que fait le programme présenté ici.

Ce programme est écrit en Python et utilise la bibliothèque pysvn pour parler à Subversion (un des gros avantages de Subversion par rapport à l'ancêtre CVS est de disposer d'une API, ce qui facilite énormément le développement de petits utilitaires comme celui-ci).

Voici un exemple d'utilisation :

% svncommits2gnuplot.py -p ~/Programmation/Python/python-dev \
          --start "2007-01-01 0:0" > /tmp/python-dev.dat

Ici, on extrait les données de la copie de travail Subversion située en ~/Programmation/Python/python-dev (c'est le dépôt de développement de Python) et on les met dans un fichier de données accessible à Gnuplot, /tmp/python-dev.dat. Un fichier de commandes Gnuplot comme celui-ci peut ensuite traiter ce fichier de données :

set terminal png
set xlabel "Week"
set ylabel "Commits (not their size or quality, only their number)"
set title "Activity of the Subversion repository of Python"
plot "/tmp/python-dev.dat" using 1:2 with lines title ""

Avec la commande :

% gnuplot /tmp/python-dev.gp > /tmp/python-dev.png

on obtient ce beau graphique python-dev.png où on voit l'intensité du travail de développement de Python.

Le programme svncommits2gnuplot est en fait un peu plus compliqué. Il crée un fichier d'objets Python (un pickle) sérialisés, pour enregistrer certains paramètres et le fichier de commandes Gnuplot est en fait traité par Cheetah pour lire ce fichier d'objets. Voici le gabarit Cheetah pour le fichier de commandes Gnuplot :

set terminal png
set xlabel "$period from limit ($limit)"
set ylabel "Commits (not their size or quality, only their number)"
set title "Activity of the Subversion repository of echoping"
plot "subversion.dat" using 1:2 with lines title ""

et, pour effectuer les traitements, j'utilise make via le Makefile que voici :

subversion.png: subversion.dat subversion.gp
        gnuplot subversion.gp > $@

subversion.dat: svncommits2gnuplot.py
        ./svncommits2gnuplot.py -e month > $@

subversion.gp: subversion.gp_tmpl svncommits.pickle 
        cheetah fill --pickle svncommits.pickle --iext gp_tmpl --oext gp subversion.gp_tmpl

# The real dependency is to the Subversion log 
.PHONY: subversion.dat 

Ainsi, il suffit de taper make subversion.png && feh subversion.Png pour afficher des graphiques, par exemple celui-ci qui montre le développement d'echoping echoping-subversion.png. La courbe importante vers -7 correspond aux préparatifs ayant mené à la sortie de la version 6. La courbe est plus variable que celle du développement de Python puisqu'il s'agit d'un programme beaucoup plus petit, avec un seul développeur et de longues périodes d'inactivité.

Prenons un dernier exemple, celui d'un programme dont le développement semble arrêté, Flowerbed, un serveur IRIS (RFC 3981) développé par Verisign. Comme le montre la courbe, il n'y a eu aucun commit depuis deux ans flowerbed-subversion.png.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)