[couverture de Linux Magazine 88]

Perles de Mongueurs (26)

Article publié dans Linux Magazine 88, novembre 2006.

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

La perle de ce mois-ci a été rédigée par Philippe "BooK" Bruhat (book@mongueurs.net), de Lyon.pm et Paris.pm.

Récuperer les vieilles versions d'une distribution

Le site http://search.cpan.org/ fournit une interface particulièrement agréable vers CPAN.

Prenons un exemple précis : si un module a été maintenu par plusieurs auteurs au fil du temps, les différentes distributions seront disséminées dans les répertoires de chacun de ceux qui les auront déposées sur CPAN. Sur Search CPAN, un URL de la forme http://search.cpan.org/dist/Maypole/ (distribution dont plusieurs personnes se sont occupé au fil du temps) pointera vers la version la plus récente, mais la page obtenue pointera également vers les pages de toutes les autres versions, quel qu'en soit l'auteur.

Si vous disposez déjà d'un mini CPAN (voir les Perles 8 et 9, parues il y déjà quelque temps), vous avez déjà chez vous les toutes dernières versions de chaque distribution. Le script qui suit va vous permettre de récupérer les versions plus anciennes qui n'ont pas encore été supprimées du CPAN.

Visite automatisée de Search CPAN

Si NOM est le nom de la distribution recherchée, alors la page qui la concerne sur Search CPAN est http://search.cpan.org/dist/NOM. Cette page est générée automatiquement par un programme, nous pouvons donc être sûrs que le format sera identique pour toutes les pages, quelle que soit la valeur de NOM>.

En prenant par exemple Maypole, la page en question contient :

Utilisation du script

J'ai voulu tester l'installation de toutes les versions de Perl disponibles, et j'ai donc utilisé ce script de la façon suivante :

    $ all_dist perl | grep --line-buffered -v info | xargs -n 1 wget -c

Pour télécharger les fichiers sans avoir à attendre que Perl ait fini de tout récupérer, il faut forcer chaque élément de la chaîne à afficher ou à lire les lignes disponibles dès que possible. On passe donc en mode de tampon de ligne (line-buffered), pour Perl avec $|++, pour grep avec l'option --line-buffered et en forçant xargs à passer les paramètres un par un à wget.

C'est pour éviter de passer par ce grep --line-buffered que j'ai ajouté l'option --filter. La commande devient donc :

    $ all_dist --filter info perl | xargs -n 1 wget -c

Pour lancer plusieurs wget en parallèle, on peut utiliser l'option -P de xargs, qui permet de définir le nombre de processus lancés en parallèle (par défaut 1, 0 signifiant « pas de limite »). On peut également jouer avec l'option -n pour passer plusieurs URL à une même instance de wget.

Bien sûr, on peut également sauver toutes ces URL dans un fichier perl.lst, faire un peu de tri manuellement et appeler wget -i perl.lst. Notez bien que les URL renvoyées par Search CPAN redirigeront vos requêtes vers les divers miroirs CPAN existant dans votre région (j'ai ainsi eu l'occasion de passer par à peu près tous les miroirs français de CPAN quand j'ai récupéré toutes les distributions de Perl disponibles).

Le fichier en question donne les liens vers 37 versions de Perl, chez 12 auteurs différents.

Références

À vous !

Envoyez vos perles à perles@mongueurs.net, elles seront peut-être publiées dans un prochain numéro de Linux Magazine.

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]