Donner une préférence de poids aux utilisations de pipelines #4762

Open
opened 7 months ago by rastapopoulos · 5 comments
Owner

Je soumets ceci à votre sagacité.

Il me semblerait utile de pouvoir, en plus du comportement par défaut, ajouter explicitement une préférence de poids lors des déclarations de pipelines. Ça ne pourra jamais être un placement pile à tel endroit précis, mais cela résoudrait je crois 99% des cas où où veut qu'un pipeline se lance "le plus possible à la fin des autres", ou "le plus possible au début".

Car :

  1. un plugin ne peut pas nécessiter tous les autres du monde pour passer au max à la fin (et on ne veut pas forcément ça pour tous les pipelines qu'il utilise)
  2. un plugin peut être nécessité pour totalement autre chose, et pourtant vouloir passer après en terme de mécanisme pour tel pipeline précis

L'idée serait que :

  • par défaut, c'est toujours pareil bien sûr, ça se lance dans l'ordre des dépendances + alpha sinon (cas où poids=0)
  • mais si on ajoute poids=10 ou poids=-10, ça force l'ordre pour aller avant ou après
  • les pipelines d'un même poids sont ordonnés selon les dépendances + alpha (le cas défaut poids=0 étant juste un cas pareil que les autres)
Je soumets ceci à votre sagacité. Il me semblerait utile de pouvoir, en plus du comportement par défaut, ajouter explicitement une préférence de poids lors des déclarations de pipelines. Ça ne pourra jamais être un placement pile à tel endroit précis, mais cela résoudrait je crois 99% des cas où où veut qu'un pipeline se lance "le plus possible à la fin des autres", ou "le plus possible au début". Car : 1) un plugin ne peut pas nécessiter tous les autres du monde pour passer au max à la fin (et on ne veut pas forcément ça pour tous les pipelines qu'il utilise) 2) un plugin peut *être nécessité* pour totalement autre chose, et pourtant vouloir passer après en terme de mécanisme *pour tel pipeline précis* L'idée serait que : - par défaut, c'est toujours pareil bien sûr, ça se lance dans l'ordre des dépendances + alpha sinon (cas où poids=0) - mais si on ajoute poids=10 ou poids=-10, ça force l'ordre pour aller avant ou après - les pipelines d'un même poids sont ordonnés selon les dépendances + alpha (le cas défaut poids=0 étant juste un cas pareil que les autres)
Owner

Yop, je crois me souvenir d'un ticket qui abordait un sujet similaire (permettre de déclarer un ordre pour les plugins qui utilisent un même pipeline), ça ne te dit rien ?

Yop, je crois me souvenir d'un ticket qui abordait un sujet similaire (permettre de déclarer un ordre pour les plugins qui utilisent un même pipeline), ça ne te dit rien ?
Owner

Pour rappel, on peut placer un pipeline "à la fin de la liste" via le double ||
cf exemple https://git.spip.net/spip-contrib-extensions/markdown/src/branch/master/markdown_options.php#L17

Après on peut dire qu'il faudrait que ce soit aussi supporté par le paquet.xml, qu'il faudrait aussi une option "en premier" et complexifier, si quelqu'un à le courage d'implémenter le calcul du graphe d'appel en fonction des priorités...
Version cible mise à 4.1

Pour rappel, on peut placer un pipeline "à la fin de la liste" via le double || cf exemple https://git.spip.net/spip-contrib-extensions/markdown/src/branch/master/markdown_options.php#L17 Après on peut dire qu'il faudrait que ce soit aussi supporté par le paquet.xml, qu'il faudrait aussi une option "en premier" et complexifier, si quelqu'un à le courage d'implémenter le calcul du graphe d'appel en fonction des priorités... **Version cible mise à 4.1**
Owner

Si on parle bien d'ordre dans les pipelines, effectivement il existe bien déjà la déclaration avec double pipe "||" pour passer à la fin.

Le graph je pense que c'est une "stable priority queue"; soit queue de priorité avec prise en compte de l'ordre d'introduction dans la file pour les priorités identiques (ici l'ordre des dépendances), et finalement c'est peut être pas le plus dur à trouver

Il existe la classe https://www.php.net/manual/fr/class.splpriorityqueue.php (mais elle ne gère pas l'ordre à pondération identique par défaut). Cf: https://stackoverflow.com/a/25525099 pour l'adapter.

Il y a aussi : https://medium.com/`justblackbird/stable-priority-queue-in-php-9a243a1851e qui en a fait un package https://packagist.org/packages/justblackbird/stable-priority-queue
Ou encore https://www.php.net/manual/fr/class.ds-priorityqueue.php mais ça nécessite une dépendance à DS avec un polyfill https://packagist.org/packages/php-ds/php-ds

Si on parle bien d'ordre dans les pipelines, effectivement il existe bien déjà la déclaration avec double pipe "||" pour passer à la fin. Le graph je pense que c'est une "stable priority queue"; soit queue de priorité avec prise en compte de l'ordre d'introduction dans la file pour les priorités identiques (ici l'ordre des dépendances), et finalement c'est peut être pas le plus dur à trouver Il existe la classe https://www.php.net/manual/fr/class.splpriorityqueue.php (mais elle ne gère pas l'ordre à pondération identique par défaut). Cf: https://stackoverflow.com/a/25525099 pour l'adapter. Il y a aussi : https://medium.com/`justblackbird/stable-priority-queue-in-php-9a243a1851e qui en a fait un package https://packagist.org/packages/justblackbird/stable-priority-queue Ou encore https://www.php.net/manual/fr/class.ds-priorityqueue.php mais ça nécessite une dépendance à DS avec un polyfill https://packagist.org/packages/php-ds/php-ds
Owner

Le plus dur serait peut être de se mettre d'accord sur… les valeurs des priorités…

Le plus dur serait peut être de se mettre d'accord sur… les valeurs des priorités…
Poster
Owner

Oui alors c'est pour ça que je demandais, je n'arrive pas trop à voir si c'était facilement implémentable ou pas. Donc si y a des libs qui aident tant mieux. Si un jour on ajoute cette possibilité, ça fera un système pas mal super fin pour l'extension, encore plus qu'actuellement.

S'il y a déjà pour le cas "tout à la fin" c'est une bonne chose, super. Je suis persuadé d'avoir déjà vu sur la zone un cas qui aurait aimé être le plus au début, inversement, mais je n'arrive plus à me retrouver lequel.

Oui alors c'est pour ça que je demandais, je n'arrive pas trop à voir si c'était facilement implémentable ou pas. Donc si y a des libs qui aident tant mieux. Si un jour on ajoute cette possibilité, ça fera un système pas mal super fin pour l'extension, encore plus qu'actuellement. S'il y a déjà pour le cas "tout à la fin" c'est une bonne chose, super. Je suis persuadé d'avoir déjà vu sur la zone un cas qui aurait aimé être le plus au début, inversement, mais je n'arrive plus à me retrouver lequel.
Sign in to join this conversation.
No Milestone
No project
No Assignees
4 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.