Page 1 sur 2

[R] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 17:03
par Amesamana
Bonjour,

Je veux vérifier la version de mon outil est proposer le téléchargement si une nouvelle version est en ligne.

je me suis fait cette function :
► Afficher le texte
Je ne comprends pas pourquoi en ayant les mêmes caractères (2.0) sur version.txt et $VERSION j'ai $TELCHARMENT qui s'affiche, je ne devrait pas !
Si $VERSION passe à 2.1 $TELCHARMENT ne s'affiche pas, logique, mais pourquoi en 2.0 il s'affiche alors que nous avons la même valeur.
En le marquant ainsi je ne devrait pas avoir de soucis ?
If $VVERSION > $VERSION Then
Merci.

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 20:54
par jguinch
Etonant, ce truc là fonctionne, normalement...

Code : Tout sélectionner

$version = "2.0.0.1"
$newVersion = "2.0.0.3"
If $newVersion > $version Then MsgBox(0, "", "Une nouvelle version est disponible")
Peut-être que tu as essayé ton script plusieurs fois en changeant la valeur dans le fichier Version.txt ?
Du coup, c'est possible que le téléchargement ne se fasse pas car il utilise le cache.
Tu peux forcer le téléchargement avec InetGet :

Code : Tout sélectionner

InetGet("http://xxx/Version.txt", @TempDir & "\Version.txt"[b], 1[/b])
Sinon, tu peux comparer les valeurs en spécifiant qu'il s'agît d'un nombre :

Code : Tout sélectionner

If Number($VVERSION) > Number($VERSION)
...mais du coup, tu ne pourras pas utiliser des versions du style 2.0.1.3

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 21:11
par Tlem
jguinch a écrit :mais du coup, tu ne pourras pas utiliser des versions du style 2.0.1.3
Il suffit de supprimer les points. ;)

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 21:20
par jguinch
@tlem : oui, mais non...
Si on doit comparer les versions 2.7.1 et 2.8, ça ne marche plus si on enlève les points. :P

Edit : si on respecte le même type de versioning, ça marchera

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 21:52
par Tlem
Oui, mais ....
► Afficher le texte

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 22:24
par jguinch
Oui mais... là ça marche plus :P :

Code : Tout sélectionner

$Version1 = "2.7.1"
$Version2 = "2.10"
MsgBox(32, "La plus grande version", _GreaterVersion($Version1, $Version2))
On peut faire ça :
► Afficher le texte

Re: [..] Vérification de la version d'un outil

Posté : sam. 19 oct. 2013 23:36
par Tlem
jguinch a écrit :Oui mais... là ça marche plus :P
Rhooo.
Mais effectivement.

Ton code semble ok, mais n'est-il pas judicieux de le simplifier à ceci :
► Afficher le texte

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 01:33
par jchd
Si on exclut les cas pathologiques où un développeur fou crée plus de 10000 versions à un niveau donné, on peut encore simplifier :
► Afficher le texte

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 07:34
par jguinch
JC, tu m'as foutu la honte :oops:
Une seule ligne...

Bref, si Amesamana pouvait nous dire si ça lui va ?

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 10:03
par jchd
Mais non, reste positif : j'ai soumis une idée qui pourra te servir dans d'autres contextes.

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 10:05
par Tlem
jguinch a écrit :JC, tu m'as foutu la honte :oops:
Je ne suis pas tout à fait d'accord. En fait JC triche légèrement puisqu'il utilise quelque chose qui n'est pas encore sorti en version finale !
De plus la fonction ne compare pas deux n° de version. Elle se contente de modifier une chaine. Il faut ensuite rajouter un traitement pour déterminer quel version est la plus élevée ...

Pour une fonction équivalente à celles proposées, ceci correspondrait mieux :

Code : Tout sélectionner

Func _PgmVersion($v1, $v2)
    Local $nv1 = (Execute(StringRegExpReplace($v1, "(\d+)(\.)?", "StringFormat('%04u', \1) & ") & "''"))
    Local $nv2 = (Execute(StringRegExpReplace($v2, "(\d+)(\.)?", "StringFormat('%04u', \1) & ") & "''"))
    Return ($nv1 > $nv2 ? $V1 : $V2)
EndFunc
Et là, ce n'est plus 1 lignes, mais 3. Bon, il faut saluer la performance quand même. ;)

Ceci dit, non seulement pour utiliser ce code il faut une version minimale d'AutoIt qui gère l'opérateur ternaire, mais en plus ce n'est pas rétro-compatible. :mrgreen:
Donc un "Require AutoIt version 3.9.x" aurait été bien vu.

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 10:18
par jchd
A cette heure-là, tout est flou, hein !
Ceci dit, l'opérateur ternaire n'est là que pour l'affichage.

On peut aussi tout simplement employer _VersionCompare()

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 11:32
par Tlem
jchd a écrit :On peut aussi tout simplement employer _VersionCompare()
Haaa ben voilà, il me semblait bien que je l'avais déjà vu ça quelque part celui-là !!!

[Mode mauvaise foi ON]
Bon, ceci dit, _VersionCompare() fait 31 lignes (19 lignes si on exclu la comparaison par chaîne et la gestion du séparateur) et oblige un Include ... :mrgreen:
[Mode mauvaise foi OFF]
jchd a écrit :Ceci dit, l'opérateur ternaire n'est là que pour l'affichage.
Oui et non. Sans l'opérateur ternaire, tu ne peux déterminer lequel des arguments est plus grand. :P

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 11:49
par Amesamana
Bonjour à tous,

Merci pour vos réponses, je vais regarder tout ça :wink:
Tlem a écrit :Bon, ceci dit, _VersionCompare() fait 31 lignes (19 lignes si on exclu la comparaison par chaîne et la gestion du séparateur) et oblige un Include ... :mrgreen:
Oblige un Include, est-ce un soucis ?
_VersionCompare() fait 31 lignes => je vais rechercher :)
Dans mon fichier de base j'ai ajouté :

Code : Tout sélectionner

#AutoIt3Wrapper_Res_Fileversion=2.0
#include <Version.au3>
_VERIFVERSION()

J'ai essayé d'inclure cette fi=unstion directement dans mon code de dase mais idem.
Mais tout de même pas logique car ma function ne devrait pas poser de soucis.
J'ai bien vidé mon cache, et vérifié si dans @Temp@ la version était bien celle désiré, mais idem.

Je me penche sur vos réponse est revient vers vous.

Merci.

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 13:17
par Tlem
Pour _VersionCompare(), il faut inclure le fichier Misc.au3.
Ouvrez celui-ci et regardez comment fonctionne cette fonction car elle permet de comparer deux version en retournant des valeurs tel que 1, -1 ou 0. ;)

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 16:28
par jguinch
Tu as lu mon premier post à propos de InetGet ?

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 17:29
par Amesamana
Oui j'ai rajouté le 1 pour forcer le téléchargement, mais idem
J'ai même essayé avec 2.0.0.0

Ces deux valeurs sont bien reconnus.
Pas logique tout ça car ma fonction devrait marcher.
J'ai vider le cache mais idem, je surveille bien mon version.txt dans @temp@ change quand je fais le modif mais idem ?

Je ne saisi pas vraiment pourquoi avec une valeur égale j'ai :
Image
Même si je télécharge d'un autre PC.
Je regarde du côté de Misc.au3 :?

Re: [..] Vérification de la version d'un outil

Posté : dim. 20 oct. 2013 22:00
par jguinch
En partant du morceau de code (qui ne fonctionne pas :x ) que tu avais mis dans ton premier post, j'ai essayé de reproduire le problème : chez moi ça marche plutôt bien.
J'ai squeezé l'étape du InetGet et créé le fichier Version.txt dans le même répertoire que le script. Tout se passe normalement.

Est-ce que tu peux essayer ce code chez toi, avec le fichier Version.txt dans le répertoire du script ? Si tu n'as pas le problème avec ce code, c'est qu'il y a un problème dans ton script original.
► Afficher le texte


Edit (pour Thierry)
Tlem a écrit :Ton code semble ok, mais n'est-il pas judicieux de le simplifier à ceci
Je rêve : Tlem m'a tutoyé ! :shock: Ils annoncent de la neige ces prochains jours ?
A+ :wink:

Re: [..] Vérification de la version d'un outil

Posté : dim. 27 oct. 2013 10:18
par Amesamana
Bonjour,

Désolé pour cette réponse tardive.

J'ai donc essayé sans inetGet mais idem !
J'ai bien un fichier version.txt dans mon répertoire de l'outil.

J'avoue ne pas comprendre pourquoi ce script ne marche pas !

Merci pour l'aide :)

Re: [..] Vérification de la version d'un outil

Posté : dim. 27 oct. 2013 12:33
par mikell
Amesamana a écrit :Je ne saisi pas vraiment pourquoi avec une valeur égale j'ai ...
Attention, avec les codes précédents (même celui de jchd) si une version se termine par .0 la comparaison est faussée :mrgreen:
Faut donc introduire un petit ajustement pour zapper les trailing zeros indésirables
► Afficher le texte