Accueil > Distributions > Les plugins "Core"

Les plugins "Core"

mardi 5 juin 2018, par James

L’intégration de Composer dans la gestion des plugins de la distribution "Classic" de SPIP est le problème technique le plus complexe à résoudre. La question de leur installation a été réglé grâce à L’installeur Composer pour SPIP. Toutefois, pour qu’un dépôt Composer puisse être mis à jour à chaque changement et que l’historique du code de ces plugins soit préservé en cas de migration vers des dépôts GIT [1] ainsi que de régler, par étape, la contrainte technique que pose l’utilisation du mécanisme des « externals » de subversion, il est nécessaire de réorganiser les branches de développement et de maintenance de ces plugins. Voici une solution qui propose une méthode à la fois systématique et progressive pour ce faire.

Historique de la gestion du code source des plugins du core

À une époque où Composer n’existe pas encore et où la seule solution technique assez répandue est PEAR, et que celle-ci ne peut satisfaire les besoins des installations SPIP, c’est vers le logiciel de gestion de versions subversion que l’équipe se porte pour l’externalisation des fonctionnalités de SPIP. Les étapes sont simples et de bon sens :

  • On supprime le code d’une fonctionnalité dans le dépôt subversion de SPIP.
  • On crée un plugin sur la Zone dans lequel on rassemble le code de cette fonctionnalité.
  • On référence l’adresse du plugin via le mécanisme natif de subversion des « externals ».

C’est donc en juin 2010 que les travaux de découpage du noyau SPIP débutent, en commençant par le déplacement du code des squelettes par défaut sur la zone :

Le jeu de squelettes était déjà isolé dans un répertoire bien à lui. Il n’en était pas de même pour les fonctionnalités qui furent externalisés par la suite mais la solution technique, qui évoluera dans le sens de la remarque de l’ami davux, restera la même [2].

Le modèle s’est donc stabilisé au cours du développement de SPIP3.0 et, pour chaque <plugin> on propose désormais les adresses suivantes :

svn://zone.spip.org/spip-zone/_core_/plugins/<plugin>/paquet.xml
svn://zone.spip.org/spip-zone/_core_/branches/spip-3.0/plugins/<plugin>/paquet.xml
svn://zone.spip.org/spip-zone/_core_/branches/spip-3.1/plugins/<plugin>/paquet.xml
svn://zone.spip.org/spip-zone/_core_/branches/spip-3.2/plugins/<plugin>/paquet.xml

Avantages

  • Il devient donc aisé d’assembler le code de SPIP depuis ses différents dépôts. Avec une seule commande (svn co svn://...), on peut récupérer sur sa machine de développement ou sur le serveur hôte de l’application l’ensemble du code pour la version de SPIP choisie. Accessoirement, on peut le faire pour produire une archive ZIP qui sera mise à disposition pour un téléchargement ultérieur.
  • Avec une seule commande (svn up), on peut aussi mettre à jour le code de SPIP. On peut aussi télécharger le nouveau ZIP qui aura été produit.

Inconvénients

  • On ne pourra toutefois pas mettre à jour d’autres plugins avec cette unique commande, ni se passer d’une fonctionnalité non souhaitée.
  • D’autres part, bien qu’ayant une granularité plus fine dans le référencement des adresses « svn », la tradition de gérer les branches en fonction de la version de SPIP et non du plugin lui-même est conservée. Ainsi, les versions des plugins du core n’ont que peu d’intérêt.
  • On ne peut, de manière simple, mettre à jour un plugin du core qu’en changeant de version de SPIP.
  • Enfin, parce que le mécanisme de référencement des plugins est lié à l’outil subversion, il devient difficile de le remplacer par, ou de le faire cohabiter avec un autre logiciel de gestion de versions.

Cible

Pour passer à l’utilisation de Composer, il apparaît nécessaire de changer le mode de gestion des plugins.

Pour chaque plugin, on doit transformer l’organisation des répertoires comme ci-dessous :

svn://zone.spip.org/spip-zone/_composer_/<plugin>/trunk/paquet.xml
svn://zone.spip.org/spip-zone/_composer_/<plugin>/branches/<branche>/paquet.xml

Pour déterminer une <branche>, il est proposé de conserver les numéros de version MAJEUR et MINEUR défini dans le fichier paquet.xml

Le cas échéant [3] :

svn://zone.spip.org/spip-zone/_composer_/<plugin>/tags/<tag>/paquet.xml

<tag> devra correspondre à la valeur de la version saisie dans le fichier paquet.xml.

  • Il sera possible de régler la propriété svn:externals dans les branches de SPIP sur ces nouveaux emplacements [4]
  • Le script ci-dessous devrait aider à gérer le changement des adresses dans le dépôt subversion de SPIP :

    .

  • Il sera beaucoup plus facile d’opérer à la migration du code vers des dépôts « git ».

Versions des plugins définies dans les fichiers paquet.xml par branche de maintenance SPIP

Plugins mandataires

echo "3.3.x-dev" && svn cat svn://zone.spip.org/spip-zone/_core_/plugins/<plugin>/paquet.xml | grep version
echo "3.2" && svn cat svn://zone.spip.org/spip-zone/_core_/branches/spip-3.2/plugins/<plugin>/paquet.xml | grep version
echo "3.1" && svn cat svn://zone.spip.org/spip-zone/_core_/branches/spip-3.1/plugins/<plugin>/paquet.xml | grep version
echo "3.0" && svn cat svn://zone.spip.org/spip-zone/_core_/branches/spip-3.0/plugins/<plugin>/paquet.xml | grep version
Plugin 3.3.x-dev 3.2 3.1 3.0 composer
mots 2.9.0 2.8.4 2.7.8 2.4.16 https://composer-spip.lerebooteux.fr/#mots
organiseur 1.3.1 1.2.3 1.0.3 0.8.12 https://composer-spip.lerebooteux.fr/#organiseur
images [5] 2.1.1 2.0.3 1.2.1 1.1.11 https://composer-spip.lerebooteux.fr/#images
dist 3.3.0 3.2.1 3.1.0 3.0.8 https://composer-spip.lerebooteux.fr/#dist
breves [6] 1.5.1 1.4.0 1.3.14 1.3.6 https://composer-spip.lerebooteux.fr/#breves
sites 2.0.0 1.10.3 1.9.25 1.7.20 https://composer-spip.lerebooteux.fr/#sites
forum 1.12.1 1.11.4 1.9.36 1.8.43 https://composer-spip.lerebooteux.fr/#forum
medias 2.21.12 2.20.24 2.11.44 2.8.71 https://composer-spip.lerebooteux.fr/#medias

Autres Plugins

Plugin 3.3.x-dev 3.2 3.1 3.0 composer
jquery_ui 1.12.1 1.12.1 1.11.4 1.8.21 https://composer-spip.lerebooteux.fr/#jquery_ui
archiviste 0.3.0 0.2.2 N/A N/A https://composer-spip.lerebooteux.fr/#archiviste
mediabox 1.2.0 1.1.4 1.0.4 0.8.11 https://composer-spip.lerebooteux.fr/#mediabox
etc. [7]

On en déduit les branches de maintenance des plugins, par exemple 1.12, 1.11 et 1.8 pour jquery_ui.

Le script ci-dessous permet de récupérer l’arborescence actuel d’un plugin du core et de créer sa nouvelle organisation en observant à le standard layout et semver :

On peut faire des svn mv ... au lieu des svn cp ..., ou supprimer les anciens emplacements :

Plugin suivant :

Éventuellement, la migration vers GIT :

Ajouter un fichier composer.json :

et un fichier .gitignore pour chaque branche :

Supprimer le plugin sur le dépôt subversion de la zone : svn rm ${ZONE_SVN_ROOT}/_composer_/jquery_ui.

Déréférencer le plugin dans les externals :

Et ainsi de suite...


[1ou pour intégrer Composer sur toutes les versions SPIP actuellement maintenues (à savoir de la 3.0 à la 3.2)

[2Une référence externe par extension puis passage aux répertoires squelettes-dist et plugins-dist entre les révisions 19144 et 19160, en mars 2012.

[3Il faut espérer qu’on n’arrivera pas à cette extrémité. Cela signifierait un blocage ou un report à longue échéance de l’intégration de Composer

[4Et éventuellement pour de futurs tags si l’arrivée du dépot Composer tarde trop...

[5renommé à partir du prefix du plugin filtres_images

[6On constate qu’entre les versions SPIP 3.1 et 3.0, il n’y a pas de changement de version majeure ou mineur, mais seulement un numéro de patch. Cela risque de rendre plus difficile la réorganisation du dépôt. à moins qu’un merge des 2 branches suffise

[7Reste à faire :

Vos commentaires

  • Le 6 juin 2018 à 10:25, par James En réponse à : Les plugins "Core"

    Ce n’est pas détaillé dans l’article, mais le mode opératoire de migration vers git proposé ici devrait être complété par une récupération des "auteurs", le nettoyage des messages de log, comme l’a proposé Cédric il y a déjà quelques années http://www.yterium.net/Migrer-un-pr... par exemple.

    En plus des fichiers composer.json, et éventuellement composer.lock, et .gitignore, il serait judicieux de fournir au minimum un fichier LICENSE ainsi qu’un fichier README.md.

  • Le 1er février 2019 à 11:15, par James En réponse à : Les plugins "Core"

    Mise à jour du tableau de correspondance des plugins et des versions de SPIP :

    Plugin 3.3.x-dev 3.2 3.1 3.0
    aide 1.1.0 1.0.0 - -
    archiviste 0.3.0 0.2.2 - -
    breves 1.5.2 1.4.0 1.3.14 1.3.6
    compagnon 1.7.0 1.6.1 1.5.2 1.4.1
    compresseur 1.13.12 1.12.7 1.10.8 1.8.13
    dist 3.3.0 3.2.1 3.1.0 3.0.8
    dump 1.9.2 1.8.4 1.7.7 1.6.9
    forum 1.12.2 1.11.5 1.9.36 1.8.43
    images 2.1.1 2.0.3 1.2.1 1.1.11
    jqueryui 1.12.1 1.12.1 1.11.4 1.8.21
    mediabox 1.2.0 1.1.4 1.0.4 0.8.11
    medias 2.21.20 2.20.30 2.11.48 2.8.72
    mots 2.9.4 2.8.6 2.7.9 2.4.16
    msie_compat - - - 1.2.0
    organiseur 1.3.4 1.2.4 1.0.3 0.8.12
    petitions 1.7.1 1.6.1 1.5.4 1.4.6
    plan 2.3.1 2.2.5 2.1.2 -
    porte_plume 1.20.0 1.8.3 1.15.15 1.12.5
    revisions 1.10.3 1.9.4 1.8.8 1.7.12
    safehtml 1.6.1 1.5.2 1.4.3 1.4.1
    sites 2.0.1 1.10.3 1.9.25 1.7.20
    squelettes_par_rubrique 1.3.0 1.2.1 1.1.2 1.1.1
    stats 1.3.2 1.1.11 1.0.14 0.4.41
    svp 1.5.0 1.3.8 1.0.11 0.80.28
    tw 1.6.4 1.5.5 1.3.19 0.8.32
    urls 2.3.1 2.1.7 1.5.9 1.4.29
    vertebres 1.4.0 1.3.2 1.2.7 1.2.2

Un message, un commentaire ?

Qui êtes-vous ?
Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.