Ticket #406 (closed enhancement: fixed)

Opened 6 months ago

Last modified 2 months ago

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

Reported by: hugues Assigned to: doubleface
Priority: low Milestone: Jelix 1.1 beta 1
Component: jelix:core response Version: 1.0RC2
Severity: trivial Keywords:
Cc: Php version:
Review: review+ Hosting Provider:
Documentation needed: 1 Blocking:

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

jrcmdline.patch (19.8 kB) - added by doubleface on 04/26/08 18:08:29.

Change History

01/08/08 10:33:50 changed by laurentj

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

01/08/08 11:16:17 changed by hugues

  • status changed from new to closed.
  • resolution set to invalid.

si si :)

(follow-up: ↓ 5 ) 01/08/08 11:26:44 changed by laurentj

  • status changed from closed to reopened.
  • severity changed from normal to trivial.
  • component changed from jelix to jelix:core response.
  • priority changed from normal to low.
  • milestone set to Jelix 1.1.
  • resolution deleted.

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.

01/08/08 11:49:18 changed 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

(in reply to: ↑ 3 ) 03/01/08 13:32:44 changed by doubleface

  • review changed.
  • docneeded changed.

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.

03/29/08 18:38:49 changed by doubleface

  • owner set to doubleface.
  • status changed from reopened to new.

03/29/08 18:39:09 changed by doubleface

  • status changed from new to assigned.

03/31/08 23:06:40 changed 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.

04/14/08 23:14:40 changed 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..

04/15/08 07:10:44 changed 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

04/15/08 11:15:20 changed 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.

04/24/08 22:42:28 changed 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

04/24/08 22:52:22 changed by laurentj

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

04/24/08 22:52:49 changed by laurentj

de chaque ticket modifié

pardon, je veux dire, de chaque fichier modifié

04/26/08 18:08:29 changed by doubleface

  • attachment jrcmdline.patch added.

04/26/08 18:12:07 changed 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 :-)

04/26/08 18:21:46 changed by doubleface

  • review changed from review- to review?.

04/30/08 23:40:51 changed 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.

04/30/08 23:41:25 changed by laurentj

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

04/30/08 23:41:37 changed by laurentj

  • docneeded set to 1.

05/20/08 18:35:24 changed by laurentj

  • status changed from assigned to closed.
  • resolution set to fixed.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed