developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#406 closed enhancement (fixed)

avoir une sortie en "live" dans la console quand on utilise cmdline

Reported by: hugues Owned by: doubleface
Priority: low Milestone: Jelix 1.1 beta 1
Component: jelix:core response Version: 1.0RC2
Severity: trivial Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Un ajout qui pourrai être sympa pour ceux qui utilise pas mal cmdline, c'est d'avoir un e sortie en live, sans devoir attendre le return. Un espèce de jLog mais qui écrit dans la console.

Attachments (1)

jrcmdline.patch (19.8 KB) - added by doubleface 13 years ago.

Download all attachments as: .zip

Change History (22)

comment:1 Changed 13 years ago by laurentj

euh... echo "pouet"; ne suffit pas ?

comment:2 Changed 13 years ago by hugues

  • Resolution set to invalid
  • Status changed from new to closed

si si :)

comment:3 follow-up: Changed 13 years ago by laurentj

  • Component changed from jelix to jelix:core response
  • Milestone set to Jelix 1.1
  • Priority changed from normal to low
  • Resolution invalid deleted
  • Severity changed from normal to trivial
  • Status changed from closed to reopened

Je ré-ouvre le ticket. On pourrait avoir un jResponseCmdline, identique que jResponseText mais sans l'envoi d'entete ou autre, et avec une méthode type setContent qui ne ferais qu'un echo (avec la possibilité pourquoi pas de "bufferiser")... Au moins ça ne casse pas le principe de jelix.

comment:4 Changed 13 years ago by bballizlife

J'allais rebondir sur la fermeture de ce ticket un peu précipité. Je préfère moi aussi voir l'ajout d'une réponse adaptée pour que ça soit plus propre

comment:5 in reply to: ↑ 3 Changed 13 years ago by doubleface

  • Documentation needed unset

Replying to laurentj:

Je ré-ouvre le ticket. On pourrait avoir un jResponseCmdline, identique que jResponseText mais sans l'envoi d'entete ou autre, et avec une méthode type setContent qui ne ferais qu'un echo (avec la possibilité pourquoi pas de "bufferiser")... Au moins ça ne casse pas le principe de jelix.

Il serait pas mal aussi de gérer le code de retour de la ligne de commande, donné grâce a la commande exit.

comment:6 Changed 13 years ago by doubleface

  • Owner set to doubleface
  • Status changed from reopened to new

comment:7 Changed 13 years ago by doubleface

  • Status changed from new to assigned

comment:8 Changed 13 years ago by doubleface

  • review set to review?

Voila une tentative de proposition.

Il est possible definir le code de retour, et le code de retour est automatiquement a 1 pour une erreur non interceptee.

Cela implique quelques modifs dans le jCoordinator...

J'ai laisse aussi la possiblite de bufferiser avec un parametre booleen pour setContent.

En guise de test, j'ai un peu modifie le controleur de ligne de commande de junittest qui utilise maintenant cette reponse. Cette nouvelle reponse devient d'ailleur la reponse par defaut des requetes en ligne de commande.

comment:9 Changed 13 years ago by laurentj

  • review changed from review? to review-

Je n'aime pas trop ce hack sur jCoordinator. Je pense qu'il est préférable de faire un coordinateur spécifique pour les lignes de commande, héritant de jCoordinator.

Et on pourrait simplifier le code. Par exemple, pourquoi renvoyer le code status en sortie d'output() ? Je pense qu'on pourrait dans Output tester le code exist_status, et selon sa valeur renvoyé true ou false. Donc le test dans le coordinateur serait inutile. Et à la fin du process, on a juste à faire un exit($this->response->exitStatus). Donc cela reviendrai à avoir

class jCmdlineCoordinator extends jCoordinator {
   public function process ($request){
     parent::process($request);
      exit($this->response->exitStatus ); 
   }
}

Bien sûr, il faut rajouter cette propriété exitStatus... (ou un getExitStatus). D'ailleurs, je préfère qu'on l'appelle exitCode..

comment:10 Changed 13 years ago by doubleface

Je n'avais pas envisagé de faire un coordinateur spécifique. C'est vrai que sa simplifie pas mal la gestion du code de retour.

Je vais m'occuper de ça.

Merci

comment:11 Changed 13 years ago by doubleface

  • review changed from review- to review?

J'ai mis a jour le patch. Plus de "bidouilles" dans le jCoordinator. Je pense que c'est plus propre maintenant.

comment:12 Changed 13 years ago by laurentj

  • review changed from review? to review-

C'est effectivement plus propre. Quelques petits trucs cependant :

Index: testapp/scripts/cmdline.php
 
-$jelix = new jCoordinator($config_file);
+$jelix = new jCmdlineCoordinator($config_file);

Ok, mais il faut faire un include du fichier de jCmdlineCoordinator. Il ne faut pas l'inclure dans init.php puisque c'est inutile la plupart du temps. Donc le patch sur init.php est à annuler.

Même remarque sur testapp/scripts/tests.php, et lib/jelix-scripts/templates/scripts/cmdline.php.tpl

lib/jelix-modules/junittests/controllers/default.cmdline.php

     protected function _prepareResponse(){
-        $rep = $this->getResponse();
+        $rep = $this->getResponse('cmdline');

Ça ne sert à rien de modifier ça, ça revient au même ;-)

@@ -63,7 +63,7 @@
     }
 
     protected function _finishResponse($rep){
-
+        $rep->flushContent();
         return $rep;
     }

Inutile. La réponse va être renvoyée au coordinateur, qui va alors appeler output(), qui elle même va faire le flushContent()...

             jContext::push($module);
-            $group->run($reporter);
+            $result = $group->run($reporter);
+            if (!$result) $rep->setExitStatus(jCoordinator::EXIT_STATUS_KO);
             jContext::pop();

Tu as oublié de changer en jResponseCmdline::EXIT_CODE_KO. même erreur un peu plus loin

lib/jelix/core/jCmdlineCoordinator.class.php : ok

lib/jelix/core/request/jCmdLineRequest.class.php : Il faut corriger certaines choses dont je viens de me rendre compte. Il faut rajouter

    public function allowedResponses(){ return array('jResponseCmdLine');}

Après tout, je pense que les autres types de réponses ne seront jamais utilisés.

lib/jelix/core/response/jResponseCmdline.class.php :

+    const EXIT_CODE_KO = 1;

Je pense que c'est facilement confondable avec EXIT_CODE_OK. Il est préférable de le nommer EXIT_CODE_ERROR.

+    public function setContent($content, $bufferize=false){

Est ce que addContent ne serait pas plus approprié ? (un rechercher/remplacer dans ton diff facilitera le renommage ;-) )

Il faudrait aussi surcharger la méthode sendHttpHeaders, qui ne devrait pas executer header:

protected function sendHttpHeaders(){
   $this->_httpHeadersSent=true;
}

lib/jelix/init.php : annuler les modifications comme dit plus haut

comment:13 Changed 13 years ago by laurentj

Autre chose : met à jour les cartouches de chaque ticket modifié, en indiquant ton nom, ainsi que le fichier CREDITS de lib/jelix/

comment:14 Changed 13 years ago by laurentj

de chaque ticket modifié

pardon, je veux dire, de chaque fichier modifié

Changed 13 years ago by doubleface

comment:15 Changed 13 years ago by doubleface

Voila la nouvelle version qui tient compte de tes remarques. J'ai teste tout ca avec attention. Peut etre que cette fois c'est la bonne :-)

comment:16 Changed 13 years ago by doubleface

  • review changed from review- to review?

comment:17 Changed 13 years ago by laurentj

  • review changed from review? to review+
  • il y a des EXIT_STATUS_KO qui traînent encore.

Dans flushContent(), il manque le vidage de la variable _buffer. Si je ne me trompe pas, avec ta version actuelle, si on fait un flushContent et que l'on continue d'appeler addContent, lors du prochain flush ça réaffichera le buffer qui a déjà été flushé.

Corrige ces deux petites erreurs et ça ira, tu peux commiter.

comment:18 Changed 13 years ago by laurentj

Par vidage, je veux dire bien sûr $this->_buffer = ;

comment:19 Changed 13 years ago by laurentj

  • Documentation needed set

comment:20 Changed 13 years ago by laurentj

  • Resolution set to fixed
  • Status changed from assigned to closed

comment:21 Changed 12 years ago by laurentj

  • Documentation needed unset
Note: See TracTickets for help on using tickets.