Et si on rendait les attributs version et etat optionnels dans la balise paquet des fichiers paquet.xml ?

L’idée est de basculer vers un calcul de la version et de l’état pour SVP en fonction du nom du paquet (du fichier zip) qui est, si j’ai bien compris, récupéré sur git.spip.net (ex: bigup-v1.0.9.zip), et donc, issu de la publication d’un tag…

Si la version est présente dans le paquet.xml, c’est elle qui est prise en compte à l’affichage.
Si l’état est présent, de même, il est pris en compte à l’affichage

Si l’état est omis, on le déduit de la version, suivant ce tableau de corrrespondance :

version etat
0.X.Y experimental
X.Y.Z stable
X.Y.0-dev dev
X.Y.0-alpha* test
X.Y.0-beta* test
X.Y.0-RC* test

Si la version est omise, on la déduit du nom du fichier zip.

Avantages :

  • plus besoin de mettre à jour ce fichier paquet.xml pour publier une version,
  • c’est optionel, donc, les paquets existants continuent d’être installables, la méthode reste valable par mise à jour du fichier.

Je pense qu’il faudra aussi mettre à jour https://git.spip.net/spip/spip/src/branch/master/prive/paquet.dtd#L42
et https://git.spip.net/spip/spip/src/branch/master/prive/paquet.dtd#L43

J’ai peut-être pas pensé à des cas de figures (install manuelle par exemple), c’est peut-être impactant pour SVP ou pour SPIP lui-même, n’hésitez pas à faire des retours.

Y a peut-être un chantier du genre en cours, auquel cas, j’ai rien dit ! :slight_smile:

hum, je trouve ca risqué, car svp n’est qu’une manière parmis d’autres d’installer un plugin.

Etquand on installe en git, par ex. pour bosser dessus, bah on a quand même besoin d’avoir le numéro de version.

Tu parles du cas de l’installation manuelle, en effet.

Est-ce qu’une valeur 0.1.0 pour la version et experimental pour l’état par défaut empêcherait le fonctionnement de SVP ? et du plugin ?

Si c’est installé manuellement, c’est probablement mis à jour manuellement, non ?

sur l’état

Je serai même plus catégorique sur la notion d’état (du paquet.xml) qui pourrait totalement disparaitre, au profit de cette convention.

L’état ça correspond au « stability » dans Composer et Semver, où peut indiquer un « minimum-stability » (The composer.json schema - Composer) et un prefer-stable éventuellement. Et cette stabilité est déterminée par la partie « stability » du numéro de version (Versions and constraints - Composer) c’est à dire après .z, des états tel que -dev, -alpha, -rc …

sur les versions

C’est plus délicat…

Je serais favorable à aller vers composer.json et donc à enlever la version de paquet.xml et donc de trouver une solution… cependant là SVP et SPIP actuellement s’en servent pour déterminer si tel plugin peut être activé ou pas, en fonction de la présence de tel autre plugin à telle version (utilise, necessite dans les paquet.xml) ; SVP se sert beaucoup de la version pour déterminer si un plugin « peut être mis à jour », etc…

Là comme ça sans changement supplémentaire dans le code (et comment?) je doute un peu plus.

À un moment j’avais espéré pouvoir utiliser $id$ et $format:...$ que propose Git, avec un .git_attributes sur un des fichiers, mais… en fait ça ne se génère que sur un git archive . Ballot.

je parie que derrière gitea, c’est un git archive qui est à la manoeuvre pour exposer les zip… si on peut le paramétrer … on peut ajouter les infos que tu veux :wink:

+1, combien de plugins on voit encore en état dev alors qu’ils sont publiés en zip depuis perpète et utilisés par XXX sites.

Ce que je propose ne serait qu’une étape, qui ne casserait pas trop la compatibilité et qui pourrait être implémentée dans une 4.x, annoncée comme dépréciée pour une 4.x+1 et supprimée pour une 5.0, par exemple ?

Sinon, ça me surprendrait qu’on ait le temps de bien mesurer le tout et d’implémenter ça pour la 4.0. Et je ne voudrrait pas que ça induise un retard pour sa sortie. On a le temps.

Et quand tu bosses comme ça et que le prefix du plugin en question existe dans archives.xml, j’imagine que ça peut être la pagaille aussi ?

De même pour l’état je suis plutôt d’accord que ça devrait être inclus dans la version (donc soit rien et c’est stable, soit -dev etc).

En revanche non pour la version, je ne vois pas le rapport avec le concept de « ZIP ». Qui n’est qu’une manière de partager, distribuer, du code. Ya des plugins en Git contrib, d’autre sur des dépôts persos (autre Git ailleurs), d’autres en SVN peut-être, d’autres sans rien, juste des plugins métiers persos propres à un site, par FTP, etc, etc.

Et ces versions sont utilisées massivement pour tout ce qui concerne l’arbre de dépendance, pas juste pour l’install au tout début mais longtemps plus tard pour savoir si un plugin est toujours activable suivant ses dépendances, pour comparer les màj, etc.


RastaPopoulos

non, jamais eu de problème.

1 « J'aime »

Tu veux dire que c’est impossible de fournir une alternative qui pourrait être calculée et que l’attribut reste nécessaire dans le fichier XML ?

il y a une colonne vmax dans la table plugins et une colonne version dans la table paquets. à quoi servent-elles ?

qui pourrait être calculée

Je veux dire surtout que ça ne peut pas être calculé « à tout moment ».

Tous les dossiers dans plugins/ (y compris auto/) peuvent être déplacés, renommés, etc par une personne ayant accès au serveur/FTP à tout moment. On aura beau le calculer une fois au tout début ça ne peut être qu’un instant T lors du téléchargement. Mais ensuite ce dossier peut être renommé, déplacé. Et dès qu’on recharge « admin_plugin » il cherche tous les plugins existants à cet instant.

Ce qui est dans la base SQL n’est qu’une retranscription de l’état réel « physique » dans le dossier plugins/ (et qui n’a donc plus rien à voir avec des ZIP) qui est donc mis à jour à chaque fois, dès qu’on repasse dans « admin_plugin ». La version doit donc toujours être intrinsèque à un dossier de plugin, avec le fonctionnement de SVP.


RastaPopoulos

Ceci dit, j’ai vu sur un répertoire plugins/auto et les plugins à l’intérieur étaient téléchargés sous la forme prefix/version.

Mais ça ne change rien pour les déplacements manuels, certes.

Purée je monte un meuble et je prends une rafale dans la gueule !
C’est dingue cette activité.

L’état plus vite on s’en débarrasse mieux c’est.
Je pense que personne ne l’a jamais très bien utilisé, mieux vaut avoir un suffixe à la version mais faudra aussi savoir l’utiliser pour ne pas rester en -dev éternellement.
En plus, l’état le plus important, à savoir, le plugin est obsolète n’existe pas.
Donc, oui on peut mais ça demandera quand même des modifications dans SVP pour le calcul des mises à jour possibles en plus des petites modifications dans la DTD.

Pour la version, je ne vois pas l’intérêt surtout.
Mais là oui, je pense qu’on aura plus de travail et de réflexion.

Maintenant, il y a pour moi, sur SVP un travail majeur qui est de séparer le partie gestion du référentiel (la base de données des plugins et paquets) et la partie installation.
Je pense que le plugin SVP Référentiel doit être installé sur Plugins SPIP et/ou Contrib uniquement et servir via l’API REST existante les clients sur les site.
De fait, le client n’a que SVP Installation qui gère juste le download et l’installation des plugins souhaités.

Je pense qu’en faisant ça, on aura surement une vue plus claire de l’utilité des attributs du paquet et du fait de les extraire ou pas dudit paquet.xml.

Maintenant, comme je l’ai vu souvent dans nos fils sur SVP, ce plugin ne fait pas que l’installation. Il maintient toute la base des plugins qui est la base du site Plugins SPIP et Contrib.
Et beaucoup de choses sont dans SVP pour ce besoin même si j’ai déjà allégé le bouzin avec le retrait des catégories.

bah on va calmer le jeu :slight_smile:

ça semble faire consensus. Lançons le chantier après la 4.0. :slight_smile:

Alors oublions, tant pis, c’est pas grave …

Hop ! c’est un autre sujet, lance un nouveau thread, stp ! :smiley:

Ben non, c’est trop cool :slight_smile:

Lançons le chantier après la 4.0.

Ok.

Alors oublions, tant pis, c’est pas grave …

Ben non, je voudrais comprendre le sujet justement et ce que ça peut apporter par rapport à aujourd’hui. Il est évident qu’en prévision de Composer, une réflexion sur le contenu du paquet est importante.

Hop ! c’est un autre sujet, lance un nouveau thread, stp !

Non non, je ne suis pas encore sénile :slight_smile:
C’est à minima un sujet très lié.
Comme je l’ai écrit, il faut démêler l’écheveau de SVP entre ce qui est indispensable pour l’installation et ce qui est du ressort du référentiel des plugins (tu parlais de vmax dans plugin par exemple).
A partir de ce moment, ça sera justement plus simple voire évident de répondre à la question de la pertinence de supprimer l’attribut voire d’autres.

Ah mais moi je suis tout à fait d’accord, que l’État plus vite on s’en débarrasse mieux c’est. Ça pourrait même être le slogan pour la sortie de la 4.0.

Ça fait drôlement plaisir que vous parliez politique Ⓐ sur spip-dev…

3 « J'aime »

hey ho, elle va se calmer la police du thread (qui harcèle les gens en pv et leur demande de contribuer sur des forges privées) ? ^^

Désolé si vous l’avez mal pris. Je reformule :

La disparition de l’atttribut etat est souhaité et ne semble pas poser de problème technique s’il est déterminé autrement, notamment s’il apparait facultativement en complément de l’attribut version , sur le modèle de SemVer, avec une conversion semver/valeurs historiques (cf le tableau). Attention cependant à ne pas casser la compatibilité ascendante.

Le plugin SVP doit évoluer en splittant la partie « Référentiel » et la partie « Installation ».

Il en découle un ou plusieurs chantiers post sortie de la 4.0.

Il n’est actuellement pas envisageable de rendre l’attribut version optionnel dans le fichier paquet.xml pour les raisons techniques évoquées plus haut. Cette éventualité ne sera pas abordé en même temps que le ou les chantiers ci-dessus, voire jamais s’il n’y a pas moyen d’aménager les raisons techniques qui le rendent obligatoire à ce jour. Si j’essaie de résumer ces raisons techniques :

  • Il n’y a pas de corrélation évidente entre un sous-répertoire de plugins et la version du plugin de ce sous-répertoire.
  • Un plugin n’est pas nécessairement installé depuis un « paquet » provenant d’un fichier zip.
  • L’emplacement d’un plugin n’est pas définitif.
  • Les calculs de gestion des dépendances de SPIP et de SVP s’appuie donc sur les versions trouvées dans les paquet.xml de l’arborescence des dossiers plugins et plugins-dist (et squelettes-dist, ne l’oublions pas).
  • Les données en base ne peuvent y suppléer, surtout si le référentiel a vocation à ne plus être distribué avec SPIP.

Quel serait l’intérêt de rendre l’attribut version optionnel ?

les trucs fastidieux

Dans SPIP, on trouve la version à 3 endroits :

  • dans ecrire/inc_version.php, la globale $spip_version_affichee entre autres,
  • dans ecrire/paquet.xml,
  • dans les tags git ainsi que dans le nom du fichier zip du « paquet » SPIP.

Dans les plugins-dist :

  • dans paquet.xml,
  • dans les tags git, sous 2 formes : la valeur conforme à celle du paquet.xml (LA version du plugin) et la version SPIP dans lequel il va être distribué.

Dans squelettes-dist :

  • dans paquet.xml,
  • dans les tags git, sous 2 formes : la valeur conforme à celle du paquet.xml (LA version du plugin) et la version SPIP dans lequel il va être distribué.

Dans les autres plugins :

  • dans paquet.xml,
  • dans les tags git : la valeur conforme à celle du paquet.xml (LA version du plugin).

Pour être cohérent, il faut donc modifier un fichier (ou 2 pour SPIP) ET créer un tag (ou 2 pour les plugins-dist) quand on veut distribuer une nouvelle version.

L’intérêt, en apparence mineur, ce serait de n’avoir qu’une seule opération à faire en vue de distribuer une nouvelle version: créer un tag (et pourquoi pas, pour les « plugins-dist » et « squelettes-dist », un seul tag mais c’est un autre sujet … et pourquoi pas, pour SPIP aussi, mais c’est encore un autre sujet …).

La séparation des responsabilités

Ce qui découle du point ci-dessus, c’est qu’on peut dès lors séparer le geste de faire des commits de celui de distribuer une nouvelle version. à chaque geste technique, une responsabilité différente : un commit, je développe, un tag, je distribue.

Parfois, on corrige un petit truc et un commit suffit.

Parfois, on va entamer un processus de développement un peu plus long et de durée incertaine, dans master ou dans un branche parallèle, peu importe, mais on est, tout au long de ce processus, pas sûr de quand et sous quelle forme de X.Y.Z ce sera distribué « à la fin ». Dans ces moment-là, on ne modifie pas les attributs version+etat et pour autant, d’autres utilisateurs peuvent installer le plugin et là, on ne sait pas distinguer dans l’administration des plugins à quelle moment du processus de développement on se trouve. Est-ce qu’on est dans la 1.0.0 du dernier tag ? ou bien dans la 1.0.0 quelque part sur un commit de la branche master ou le fichier paquet.xml n’a pas encore été changé ? Ou encore : « Je suis en 1.2.3 mais je ne trouve pas le zip qui correspond pour que mon voisin essaie la même version et dans la branche git, on est en 1.2.7 … »

Entre les deux, il y a aussi différentes situations possibles.

Bref, pour remédier à ça, on peut être tenté de modifier systématiquement la version dans le fichier à chaque commit, ou bien de ne jamais la modifier et de « distribuer » avec des tags sans rapport avec la version du fichier xml. Ou alors, on va basculer d’un etat à un autre, mettre à jour la version, mais le z seulement, et quid du y, etc…

Bref, un autre intérêt, c’est d’enlever les risques d’ambiguïté entre les tags git et le contenu des fichiers xml

est-ce qu’il y a d’autres intérêts ?

Oui, notamment pour l’introduction du niveau de stabilité à travers semver et le fait de passer d’une habitude à une autre (de alpha, beta à experimental, test, stable). On pourrait parler d’obsolescence (ou d’abandon) aussi. Et bien sûr d’une « passerelle » avec composer.

Mais comme ce post est déjà assez long, je vais m’arrêter là pour le moment. :slight_smile:

2 « J'aime »

Parfois, on va entamer un processus de développement un peu plus long et de durée incertaine, dans master ou dans un branche parallèle, peu importe, mais on est, tout au long de ce processus, pas sûr de quand et sous quelle forme de X.Y.Z ce sera distribué « à la fin ». Dans ces moment-là, on ne modifie pas les attributs version+etat et pour autant, d’autres utilisateurs peuvent installer le plugin et là, on ne sait pas distinguer dans l’administration des plugins à quelle moment du processus de développement on se trouve.

bah c’est là où je suis pas d’accord je crois :wink:

si je commmence une branche de dev, disons pour une version future d’un plugin, je change tout de suite le paquet.xml, pour savoir facilement que c’est pas la version « offficielle ». Puis le jour ou c’est prêt, je tague, et là c’est distribué.

Alors je reconnais, ca oblige à avoir 2 fois l’info sur la version, entre le paquet.xml et le tag. Mais c’est aussi ce qui permet de commencer à avancer sur des fonctionnalités et des gestions de dépendances sans pour autant tauger des versions pas achevées.