Re :-)
Gontran wrote:
Merci pour ces explications, Chicha, je pense que je commence à mieux cerner
ce que tu veux faire :-)
Je commence à comprendre aussi ce qui te chiffonnait... :-) Merci de ta
patience ;-)
Ok, je comprends mieux :-) J'ai tout de même quelques doutes sur le fait qu'un
message de niveau DETAIL reste toujours de niveau DETAIL quelle que soit le
positionnement de l'étape. J'aurais quand même tendance à penser que ça
dépend du contexte d'utilisation.
Oui, tu as raison c'est pas aussi simple que ce que j'ai proposé.
Par exemple, si « Ncooker -v INFO pack » m'affiche :
Creation of the working_dir package ...
Checking working_dir directory content ... [ OK ] <- affiché par Check
Preparing packaging environment ... [ OK ]
Create "working_dir" NBUILD package ... [ OK ]
Cleaning packaging environment ... [ OK ]
Cela signifie que le seul message de niveau INFO de la commande Check est
celui que j'ai annoté. Dans le contexte d'utilisation de la commande Pack, ça
me convient parfaitement, et les messages affichés me paraissent adaptés pour
le niveau INFO. Mais si je lance « Ncooker -v INFO check », il va m'afficher
uniquement :
Checking working_dir directory content ... [ OK ]
Il n'y aura pas ces messages :
Checking "infos" file ...
Checking "build" file ...
Checking "desc" file ...
Checking "changelog" file ...
qui ne me paraisse pourtant pas être du « détail » dans ce nouveau contexte où
je cherche à vérifier la validité de mon paquet. J'aimerai savoir directement
si un fichier contient une erreur ou non. Si c'est le cas, je sélectionnerai
alors le niveau DETAIL pour savoir précisément quel est l'élément fautif du
dit fichier.
Ton exemple est bon est montre bien la limite de "ma thèse" ;-)
Je pense que faire en sorte que chaque commande/module commence son affichage
à partir du niveau INFO, et que le gestionnaire de messages se débrouille
pour réaliser les décalages de niveau nécessaires simplifierait grandement la
vie des développeurs. :-)
Oui, en y réfléchissant bien, tu as raison.
Oui, c'est une distinction qui peut se voir de cette manière :-)
Si je comprends bien, ce qui te gène à ce niveau, c'est le fait que 1, 2 ou 3
soit moins parlant que INFO, DETAIL ou FULL. Pourquoi ne pas faire un mix de
nos deux solutions alors ?
Ce qui me gêne surtout c'est de proposer à l'utilisateur de faire
Ncooker -v 1 ou -v2 ... même s'il peut aussi faire -v INFO ou -v DETAIL.
Pour moi les seuls possibilités de verbosités sont NONE, ERROR, WARNING,
INFO, DETAIL et FULL, car elles ont vraiment un sens explicite, simple
et naturelles. Maintenant dans le fonctionnement interne de Ncooker ça
ne me déranges pas... (voir plus loin).
- On garde INFO, DETAIL et FULL (avec FULL : affichage de tout ce qui arrive)
Ok :-) (on est d'accord, il n'y aura pas de -v 1 ou -v 2.... ?
- Chaque commande/module commence l'affichage de ces messages avec le niveau
INFO (pour simplifier la vie des développeurs)
Ok à 100 %
- On utilise les fonctions shiftMsgLevel() et unshiftMsgLevel() pour décaler
le niveau des messages des commandes/modules appelés. Si un message décalé
dépasse le niveau FULL, il reste forcé à FULL. Ainsi, il seront tous affichés
si le niveau FULL est sélectionné.
Ok à 100 %. Je suis quand même entrain de réfléchir à une autre solution
qui permet d'éviter d'avoir à utiliser shiftMsgLevel.
Je te propose un truc à la fin du mail. Mais dans tous les cas ta
solution est sympa :-)
késtenpense ? :o)=)
Que du bien :-)
Une ébauche de solution alternative à shiftMsgLevel() :
Comme on l'a évoqué il y a des commandes et des modules : chaque
commande peut-être tantôt utilisée de façon primaire ou de façon
secondaire, tertiaire... (en tant que sous commande). De même un module
peut faire appel à un autre module. Ce dernier devient dans le contexte
courant un module secondaire.
Comme tu l'as proposé tous les commandes/modules commencent leur
verbosité à INFO (ERROR et WARNING sont à part, mais ça ne nous a pas
posé de problème jusqu'ici et il n'y a pas de raisons que ça nous en
pose...).
Mon idée est qu'il y ait une variable globale, définie dans le module de
gestion des messages, qui définisse le contexte de verbosité.
Chaque module/commande initialise cette variable quand il est appelé, et
la reset quand il a terminé son boulot. la fonction d'initialisation
initialise (quel beau pléonasme :-) ) la verbosité en fonction de son
état au moment où elle est appellée. En gros ça consiste à faire un
shiftMsgLevel/unshiftMsgLevel mais qu'une seule fois au début et une
seule fois à la fin de chaque module/commande.
Comme je suis sûre que c'est pas clair je donne un exemple (tout ça est
une idée en construction qui ne demande qu'à être améliorée...) :
Soit CONTEXT_VERBOSITY_LEVEL cette variable (les noms des variables et
fonctions restent à définir...)
Par défaut ,
CONTEXT_VERBOSITY_LEVEL=NONE
Je fais Ncooker -v DETAIL pack toto
la commande pack va appeler au début de son processus la fonction
init_context_verbosity_level().
init_context_verbosity_level() va détecter que le niveau de verbosité
courante est NONE et va donc l'incrémenté à INFO.
Tous les messages de la commande pack (envoyés via print_msg) et ayant
la verbosité INFO et DETAIL seront affichés.
Au court de son processus, la commande pack va appeller la commande check.
Cette dernière va à son tour appeller init_context_verbosity_level() au
début de son procéssus. Celle-ci va détecter que le niveau de verbosité
courant est INFO et va l'incrémenter à DETAIL. Tous les messages de la
commande check ayant la verbosité INFO vont donc passer en verbosité
DETAIL et seront affichés (car l'utilisateur l'a choisit via -v DETAIL).
Tous les messages de la commande check ayant la verbosité DETAIL ou
supérieur vont passer à FULL et ne seront donc pas affichés.
Quand la commande (sous commande dans notre context) check a finit son
boulot elle va appeler la fonction reset_verbosity_level() et va
repasser la main à la commande pack.
La fonction reset_verbosity_level() va détecter que le niveau courant
est DETAIL et va le décrémenter à INFO.
Comme on revient dans la commande pack tout va bien :-)
Qu'est-ce que tu en penses ? (ainsi que tous ceux que ça intéresse... :-) )
++
Chicha