Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique.
x
Plusieurs scripts sont fait pour fonctionner avec une version minimale d'eggdrop, en s'appuyant sur la variable $::version
Cette variable a changé depuis eggdrop 1.8, précédement elle ne contenait que le N° de version d'eggdrop, désormais elle contient la version au format texte suivi du numéro de version:
Code:
.tcl putlog $version
1.9.2+stdin 1090204
Pour n'utiliser que le numéro de version, une variable a été introduite: $::numversion
Code:
.tcl putlog $numversion
1090204
Comment corriger les scripts ?
Trouvez la ligne qui commence (souvent) par:
On peut donc bien utiliser la 2ème partie pour la comparer à $::numversion sur les Eggs 1.8+ puisque le format expliqué par @CrazyCat dans le post précédent reste le même.
Rapport de ce qui a été dit sur IRC, pour le suivi :
Quote:(CrazyCat@Zeolia) if {(![info exists numversion] && [regsub -all {\.} [lindex $::version 0] ""]<1620 } { <-- ça, on est sûr que c'est au mieux un 1.6.21
(CrazyCat@Zeolia) vu que y'a pas le $numversion
(CrazyCat@Zeolia) Je vais réfléchir parce qu'en fait là je cherche juste à patcher des scripts qui ont besoin de 1.6.2x
(CrazyCat@Zeolia) C'est pas universel du coup
(CrazyCat@Zeolia) Le mieux serait de faire un scan de $version pour recréer $numversion
<MenzAgitat> CrazyCat > faudrait pouvoir checker si une variable est read-only pour éviter la confusion avec une variable globale custom du même nom sur un 1.6
<MenzAgitat> et je ne vois pas trop comment faire ça à part utiliser un catch et essayer de la modifier :s
La discussion reste donc ouverte pour résoudre ce problème qui, bien qu'improbable, peut tout à fait se produire avec un nom de variable aussi "banal".
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
19/04/2022, 03:00 (This post was last modified: 19/04/2022, 03:02 by ZarTek.)
Je résume ce que je comprend : $::numversion est trop récent pour les versions antérieur a 1.6.21
$::version a en cours de route changer de format de x.x.x a x.x.x+text (1.6.21 a 1.9.2+stdin) je parle en [lindex $::version 0]
ont chercher une méthode de vérification de version universel pour fonctionner peu importe la version et format de version
Quel est le problème ? Car "x.x.x" ou "x.x.x+text "ca vérifie "x.x.x" , donc détourne le problème du "+text"
de plus "package vcompare" devrais fonctionner avec des très vieilles version de TCL, non?
je lis
Quote:Il est sous la forme MNNRRPP, avec comme éléments:
M : numéro de release Majeure sur 1 digit (donc 1 actuellement)
NN : numéro de release miNeure sur 2 digits (donc 09)
RR : numéro de sous-Release sur 2 digits (donc 02)
PP : numéro de Patch sur 2 digits (donc 04)
Il manque le PP qui est le numéro de Patch, cela relève de la git branch dev, non?
Peut-être il y a longtemps l'importance entre deux PP version été importante ? Bon ok
Pourquoi ne pas utiliser [lindex $::version 1] ?
je vois que pour la 1.6.21 il vaut 1062100 et pour la version 1.9.2+stdin il vaut 1090204
ca ressemble a numversion , ce n'ai pas numversion ?
Donc en gros il faut utiliser le format long (MNNRRPP) de version :
Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site 8-)
Petite remarque en passant sur "ta méthode", il s'agit de mon code. C'est le correctif que je suggère pour mes scripts qui ont un problème de vérification de version.
$::version étant devenue une constante de format plus ou moins libre, le problème reste entier, on ne pas vraiment s'y fier.
Comment s'assurer que $::numversion n'est pas la variable globale d'un script n'utilisant pas de namespaces pout s'assurer qu'il s'agit d'un Egg <1.8 ?
En gros, comment différencier à coup sûr un Egg 1.6.x d'un Egg 1.8+ ?
Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
19/04/2022, 08:20 (This post was last modified: 19/04/2022, 12:27 by CrazyCat.)
(19/04/2022, 03:00)ZarTek Wrote: Pourquoi ne pas utiliser [lindex $::version 1] ?
je vois que pour la 1.6.21 il vaut 1062100 et pour la version 1.9.2+stdin il vaut 1090204
ca ressemble a numversion , ce n'ai pas numversion ?
Oui, c'est exactement ma première proposition (1. l'utilisation de la bonne partie de $version) et qui semble la plus passe partout.
D'après les tests faits par @MenzAgitat, eggdrop 1.6.21 retourne bien 1.6.21 1062100
Ceci permet (en espérant, comme l'a précisé @MenzAgitat, qu'aucun script sur un eggdrop ancien ne crée $::numversion) de certifier qu'un eggdrop est bien inférieur à 1.6.20. Cette idée est finalement inutile, car je n'étais pas sûr de ce que renvoyait $::version.
Mais je pense que le mieux est d'utiliser proprement le N° de version contenu dans $::version:
(19/04/2022, 07:41)MenzAgitat Wrote: Petite remarque en passant sur "ta méthode", il s'agit de mon code. C'est le correctif que je suggère pour mes scripts qui ont un problème de vérification de version.
Je suis content que tu l'ai adopté et que tu le suggère en tant que correctif :P
Pour information "le système de gestion des versions d'Eggdrop" avais été revu et mis correctement en place au cours d'une mise a jour 1.8.0 (incluant le nouveau fichier header version.h) de l'eggdrop a avant ça il été hardcoded (codé en dur) dans le code et changer de manière manuel. Ce qui laisse place a des formes de versions variable.
Depuis, le format de $::version devrais toujours rester sous la forme de liste contenant deux élément:
* le premier la version texte (MNNRR+PATCH)
* le second la version numérique (MNNRRPP)
Avec la confirmation que le deuxième élément de $::version existe déjà sous la bonne forme en v1.6.20, l'utilisation du code suivant est la bonne et la plus pertinente a retenir:
n'ai pas utile, car la version numérique ne contient aucun point. vcompare trouve sont utilité pour comparer des format telle que 1.6.20 <-> 1.9.2
Retrouvez les dernières modifications de mes scripts TCL (versions Alpha/Bêta) ainsi que d'autres de mes réalisations sur ma page GitHub et les versions stables dans la section scripts de ce site 8-)