Le Mardi 10 Mai 2005 19:45, Chicha a écrit :
> >- 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.... ?

Oui, je confirme qu'il n'y aura pas de -v 1, -v 2, ... :-)

Par contre, j'aimerai ajouter un niveau supplémentaire à ceux existants. 
Quelque chose comme "MAIN", ou tout autre appellation plus explicite, qui se 
placerait avant INFO. Ça donnerait :

$ Ncooker -v MAIN check paquet.nbuild

Checking "paquet.nbuild" package ... [ OK ]

$ Ncooker -v INFO check paquet.nbuild

Checking "paquet.nbuild" package ...
    Checking "infos" file ... [ OK ]
    Checking "build" file ... [ OK ]
    Checking "desc" file ... [ OK ]
    Checking "changelog" file ... [ OK ]

$ ...

MAIN n'afficherait donc que l'action générale de la commande.


> Une ébauche de solution alternative à shiftMsgLevel() :
>
> [...]
>
> Qu'est-ce que tu en penses ? (ainsi que tous ceux que ça intéresse... :-) )

C'est une possibilité :-)
Les fonctions shiftMsgLevel() et unshiftMsgevel() que j'ai proposé ne 
s'utilisent pas tout à fait de la même manière. En fait, elles ne sont pas 
lancés par la commande ou le module appelé, mais par la commande ou le module 
appelant.

Pour reprendre ton exemple, ça donnerait ceci :
Avant de lancer la commande Check, la commande Pack appelle shiftMsgLevel. 
Celle-ci positionne dans une variable globale le décalage de niveau de 
verbosité à appliquer aux prochains messages. Ce décalage correspond par 
défaut au niveau de verbosité du dernier message affiché + 1. Ou bien au 
niveau de verbosité du dernier message affiché + le nombre passé en paramètre 
à shiftMsgLevel(). Ainsi, la commande ou le module appelant peut contrôler 
parfaitement le décalage à opérer.

Concrétement, dans Pack:
1 print_msg "INFO" "Packaging ${dir} directory ..."
2 shiftMsgLevel
3 run_command check
4 unshiftMsgLevel

Ligne 2, shiftMsgLevel est appelé sans paramètre. Le décalage appliqué aux 
prochains messages va correspondre au niveau du dernier message affiché (donc 
INFO, ligne 1) + 1, ce qui va amener à DETAIL. Lorsque la commande Check est 
lancé ligne 3, le niveau de ses messages INFO va passer à DETAIL, ceux du 
niveau DETAIL à FULL, etc. On retrouve ici le même principe que toi.
Lorsqu'on revient dans Pack après l'exécution de Check, unshiftMsgLevel annule 
le précédent décalage.

Si la ligne 2 est :
2 shiftMsgLevel 2
le décalage opéré est de INFO + 2 = FULL. Je n'ai pas d'exemple de cas 
d'utilisation en tête, mais le cas échéant, ce serait disponible :-)

Autre avantage de faire ces appels de fonctions dans le module appelant, ça 
évite des appels inutiles dans le cas où deux modules sont utilisés 
successivement avec le même décalage. Par exemple :

1 print_msg "INFO" "Packaging ${dir} directory ..."
2 shiftMsgLevel
3 run_command check
4 run_command autre_commande
5 unshiftMsgLevel

Les fonctions shiftMsgLevel et unshiftMsgLevel ne sont appelées qu'une seule 
fois pour les deux commandes lancées lignes 3 et 4.

Je trouve que laisser le contrôle au module appelant offre plus de souplesse. 
Et vous ? :-)

++
Gontran

Répondre à