Skip to content
  • marcimat@rezo.net's avatar
    Grands changements dans Spip-Cli (en cours) · 7ab8254c
    marcimat@rezo.net a rédigé
    Maintenant que merveilleusement le répertoire vendor est sorti et qu’on a une installation normale par Composer,
    on se rapproche un peu plus d’une arborescence de paquet Composer classique.
    
    TL;DR (comme dirait James)
    -----
    ```
    svn up
    composer update
    cd bin
    rm /usr/local/bin/spip
    ln -s $(pwd)/spip /usr/local/bin/spip
    # linux
    rm /etc/bash_completion.d/spip
    ln -s $(pwd)/spip_console_autocomplete /etc/bash_completion.d/spip
    # macos
    rm /usr/local/etc/bash_completion.d/spip
    ln -s $(pwd)/spip_console_autocomplete /usr/local/etc/bash_completion.d/spip
    ```
    
    Les exécutables :
    -----------------
    - On se crée un répertoire "bin" pour y mettre les exécutables (spip et spip_console_autocomplete)
    - On déclare ces binaires à Composer, de sorte que si un autre paquet composer nécessite ce paquet, 
      les binaires seront liés dans vendor/bin/ plutôt que perdus quelque part dans vendor/...
    - Par gentillesse, on conserve les anciens exécutables (spip.php et spip_completion.sh) à la racine (dépréciés)
      qui redirigent simplement sur les nouveaux. Il convient de modifier les liens symboliques
      qui avait été fait sur le serveur (ie: /usr/local/bin/spip et /etc/bash_completion.d/spip ou /usr/local/etc/bash_completion.d/spip)
    - L’executable "spip" ne fait maintenant qu’executer l’application idoine (src/Application) et n’a pas de code en elle même.
    
     Les sources Spip-cli
    ---------------------
    - Un nouveau répertoire 'src' regroupe de nouveaux fichiers gérant Spip-Cli ainsi que ses commandes fournies de base.
    - Ce répertoire est dans le namespace 'Spip\Cli' déclaré à composer (et donc en autoloding).
    - Les commandes Spip Cli se retrouvent dans src/Command, actuellement sans modification hormis l’ajout du namespace.
    - src/Application étend l’application Console de sympfony. C’est ce fichier essentiellement (avec src/Loader/Spip) qui reçoit 
      l’ancien code de l’executable spip.php. Il se charge de : 
    * Déclarer certains services (qui seront accessibles aux commandes via `$this->getApplication()->getService('xxx')` par exemple
    * Déclarer les commandes natives de Spip-cli
    * Démarrer SPIP (s’il est installé) [note] Je ne suis pas en accord avec cela et préfèrerais que chaque commande décide ou non d’elle même de démarrer SPIP ou pas, mais bon
    * Déclarer les commandes contenus dans les plugins SPIP, dans les répertoires 'spip-cli' (si SPIP a démarré)
    
    On tente un poil de s’approcher du fonctionnement de Cilex (comme j’avais fait avec l’essai Polatouche). J’ai hésité à le reprendre directement ici,
    mais celui ci actuellement nécessite PHP 5.5.9 alors qu’actuellement Spip-cli est encore plus tolérant (5.4).
    Du coup, je n’ai repris que l’utilisation de Pimple en tant que conteneur de configuration / services.
    
    Des styles d’écriture
    ---------------------
    
    J’ai ajouté un autre morceau de Polatouche qui était l’utilisation de SymfonyStyle pour écrire plus facilement les textes affichés sur la console.
    Je l’avais étendu avec d’autres méthodes, et j’ai remis ce morceau ici également. Dans src/Console/Style/SpipCliStyle.
    
    Ainsi, une commande peut faire :
    ```
    $io = new Spip\Cli\Console\Style\SpipCliStyle($input, $output);
    $io->title("Le joli titre");
    ```
    
    C’est aussi (et de préférence) accessible avec le conteneur de service, avec le service 'console.io',
    mais une méthode getIo() le récupère également :
    ```
    /** @var SpipCliStyle $io */
    $io = $this->getApplication()->getIo($input, $output);
    $io->title($this->getDescription());
    ```
    
    En plus les styles/méthodes que propose la classe symfony (warning, error, note, title, section, table, ...),
    SpipCliStyle propose d’autres facilités comme "check, fail, care" qui ajoutent avant le texte à afficher
    une icone de réussite, d’échec ou d’attention. Il y a également "atable" pour afficher rapidement un tableau cle/valeur, 
    ou "columns" pour écrire en colonne…
    
    Loader SQL
    ----------
    
    J’en parle rapidement, mais je n’ai pas fini de le retester, je remets aussi une classe qui est capable 
    d’analyser un fichier de connexion SQL SPIP et de génerer une instance de PDO avec, afin de réaliser des 
    requetes SQL en dehors de l’API de SPIP (et de son chargement éventuel).
    
    
    Objectifs à venir et notes
    --------------------------
    
    L’objectif à travers ces modifications est multiple
    - pouvoir réutiliser plus facilement des choses que j’avais mises dans Polatouche…
    - pouvoir utiliser spip-cli sur un spip mutualisé (l’accès sql va être important pour obtenir l’url du site avant de charger spip) et
      exécuter une commande sur un ensemble de sites/ d’une mutualisation.
    - pouvoir lancer les mises à jour de BDD du core / des plugins en créant une commande pour le faire.
    
    
    7ab8254c