Browse Source

Commande from:directory pour un répertoire déjà existant.

Les commandes from:directory et from:svn fonctionnent.
svn/root/trunk
marcimat@rezo.net 9 years ago
parent
commit
b7d63a8ed4
  1. 1
      .gitattributes
  2. 1
      bin/autodoc_helper.php
  3. 15
      installation.md
  4. 24
      src/autodoc/Application.php
  5. 40
      src/autodoc/Helpers/Command/FromDirectory.php
  6. 5
      src/autodoc/Helpers/Command/FromSvn.php
  7. 157
      src/autodoc/Helpers/Generator.php
  8. 23
      src/autodoc/Helpers/phpdoc_helper.xml

1
.gitattributes vendored

@ -4,6 +4,7 @@ bin/autodoc_helper.php -text
/composer.json -text
/installation.md -text
src/autodoc/Application.php -text
src/autodoc/Helpers/Command/FromDirectory.php -text
src/autodoc/Helpers/Command/FromSvn.php -text
src/autodoc/Helpers/Generator.php -text
src/autodoc/Helpers/phpdoc_helper.xml -text

1
bin/autodoc_helper.php

@ -18,4 +18,5 @@ require_once __DIR__ . '/../src/autodoc/Application.php';
# exécuter l'application
$app = new \Cilex\Application('Autodoc Generator Helper', '1.0.0');
$app->command(new autodoc\Helpers\Command\FromSvn());
$app->command(new autodoc\Helpers\Command\FromDirectory());
$app->run();

15
installation.md

@ -144,16 +144,23 @@ pour chaque action ses arguments et options possibles.
### Quelques commandes et exemples
#### from:svn
#### from:directory
Générer la documentation depuis une source SVN quelconque.
Générer la documentation depuis un répertoire quelconque.
Par défaut, la sortie est enregistrée dans le répertoire `work/output/default`
php autodoc/bin/autodoc_helper.php from:svn svn://trac.rezo.net/spip/spip
php autodoc/bin/autodoc_helper.php from:directory /home/marcimat/www/spip-dev
Forcer un préfixe de sortie ici dans `work/output/spip-dev` :
php autodoc/bin/autodoc_helper.php from:svn svn://trac.rezo.net/spip/spip --prefixe=spip-dev
php autodoc/bin/autodoc_helper.php from:directory /home/marcimat/www/spip-dev --prefixe=spip-dev
#### from:svn
Générer la documentation depuis une source SVN quelconque.
php autodoc/bin/autodoc_helper.php from:svn svn://trac.rezo.net/spip/spip
#### from:spip

24
src/autodoc/Application.php

@ -7,6 +7,7 @@ namespace autodoc;
use phpDocumentor\Application as phpDocumentor;
use phpDocumentor\Console\Output\Output as ConsoleOutput;
use Symfony\Component\Console\Input\StringInput;
/**
* Finds and activates the autoloader.
@ -55,6 +56,29 @@ class Application extends phpDocumentor
$this['console.output']->writeln("");
}
/**
* Run the application with command as string
*
* @example
* $app->run_with_command("project:run --config=phpdoc.xml");
*
* @param bool $interactive Whether to run in interactive mode.
*
* @return void
*/
public function run_with_command($command = "")
{
/** @var ConsoleApplication $app */
$app = $this['console'];
$app->setAutoExit(false);
$output = new ConsoleOutput();
$output->setLogger($this['monolog']);
$app->run(new StringInput($command), $output);
}
}

40
src/autodoc/Helpers/Command/FromDirectory.php

@ -0,0 +1,40 @@
<?php
/*
* Commande d'exécution depuis une source répertoire …
*/
namespace autodoc\Helpers\Command;
use Cilex\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use autodoc\Helpers\Generator;
/**
* Déclaration et exécution de l'application depuis un répertoire…
*/
class FromDirectory extends Command
{
protected function configure()
{
$this
->setName('from:directory')
->setDescription("Exécuter l'autodoc sur un répertoire donné")
->addArgument('directory', InputArgument::REQUIRED, "Chemin du répertoire")
->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'default')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$directory = $input->getArgument('directory');
$output->writeln("Exécuter <info>autodoc</info> avec <info>$directory</info>.");
$generator = new Generator($input, $output);
$generator->generateFromDirectory($directory);
}
}

5
src/autodoc/Helpers/Command/FromSvn.php

@ -1,7 +1,7 @@
<?php
/*
* Commande d'execution …
* Commande d'exécution depuis une source svn …
*/
namespace autodoc\Helpers\Command;
@ -13,8 +13,9 @@ use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use autodoc\Helpers\Generator;
/**
* Exécuter l'application…
* Déclaration et exécution de l'application depuis un svn
*/
class FromSvn extends Command
{

157
src/autodoc/Helpers/Generator.php

@ -6,12 +6,9 @@
namespace autodoc\Helpers;
use Cilex\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use autodoc\Helpers\Generator;
use autodoc\Application;
/**
* Exécuter l'application…
@ -21,13 +18,80 @@ class Generator
private $input;
private $output;
private $dirs = array();
private $dirs = array();
private $files = array();
private $options = array('dirs' => array()); // forcer des répertoires en dehors des options de ligne de commande
/**
* Description de la documentation à générer
* @var string $description */
private $description = "";
/**
* Présentation de la documentation à générer
* @var string $presentation */
private $presentation = "";
/**
* Constructeur
*
* @param InputInterface $input
* @param OutputInterface $output
**/
public function __construct(InputInterface $input, OutputInterface $output)
{
$this->input = $input;
$this->output = $output;
$this->setApplicationDirectories();
}
/**
* Générer la documentation à partir d'une url SVN
*
* @param string $source URL SVN
**/
public function generateFromSvn($source) {
$prefixe = $this->input->getOption('prefixe');
$ok = $this->createDirectories($prefixe)
&& $this->getSvnSource($source)
&& $this->generateFromDirectory($this->dirs['input'], true);
return $ok;
}
/**
* Générer la documentation à partir d'un répertoire indiqué
*
* @param string $dir Chemin du répertoire source
* @param bool $is_ready
* Indique si les préparatifs (création des répertoires) sont déjà faits
**/
public function generateFromDirectory($dir, $is_ready = false) {
$prefixe = $this->input->getOption('prefixe');
$ok = true;
if (!$is_ready) {
# forcer le chemin de la source spécifique
$this->options['dirs']['input'] = $dir;
$ok = $this->createDirectories($prefixe);
}
$ok = $ok
&& $this->prepareConfigXml();
if (!$ok) {
return false;
}
$this->execute();
}
/**
* Définit les répertoires utiles à l'application
**/
private function setApplicationDirectories() {
# ce répertoire
$this->dirs['helper'] = realpath(__DIR__);
@ -40,22 +104,13 @@ class Generator
# répertoire de travail (celui où on écrira tout).
$this->dirs['work'] = $this->dirs['root'] . '/work';
}
/**
* Générer la documentation à partir d'une url SVN
*
* @param string $source URL SVN
**/
public function generateFromSvn($source) {
$prefixe = $this->input->getOption('prefixe');
$this->createDirectories($prefixe);
$this->getSvnSource($source);
$this->files['phpdoc.xml'] = $this->dirs['work'] . '/phpdoc.xml';
}
/**
* Crée les répertoires nécessaires au fonctionnement de ce programme
* Définit et crée les répertoires nécessaires au fonctionnement de ce programme
*
* @param string $prefixe Préfixe utilisé pour cette génération
* @return bool true si réussi
@ -64,10 +119,15 @@ class Generator
$_work = $this->dirs['work'];
$this->output->writeln("* Vérifier/créer les répertoires de travail dans <info>$_work</info>");
$this->dirs['output'] = $_work . '/' . "output/$prefixe";
$this->dirs['input'] = $_work . '/' . "input/$prefixe";
$this->dirs['log'] = $_work . '/' . "log/$prefixe";
$this->dirs['cache'] = $_work . '/' . "cache/$prefixe";
foreach (array('output', 'input', 'log', 'cache') as $dir) {
// valeur par défaut, en fonction du préfixe
$this->dirs[$dir] = "$_work/$dir/$prefixe";
// valeur forcée dans certains cas
if (isset($this->options['dirs'][$dir]) and $path = $this->options['dirs'][$dir]) {
$this->dirs[$dir] = $path;
}
}
foreach (array('output', 'input', 'log', 'cache') as $dir) {
if (!$this->createDirectory( $this->dirs[$dir] )) {
@ -91,7 +151,7 @@ class Generator
if (!is_dir($dir)) {
$this->output->writeln(" - Création du répertoire <info>$dir</info>");
if (!@mkdir($_dir, 0755, true)) {
if (!@mkdir($dir, 0755, true)) {
$this->output->writeln("<error>Impossible de créer le répertoire : $dir</error>");
$error = error_get_last();
$this->output->writeln($error['message']);
@ -143,12 +203,12 @@ class Generator
$this->output->write("<comment> - Checkout </comment>");
if (!$this->makeSvnCommand("checkout $source .")) {
$this->output->writeln("[<error>Echec</error>]");
$this->output->writeln("<error>[Echec]</error>");
return false;
}
$last = array_pop($res);
$this->output->writeln("[<info>OK</info>] ($last)");
$this->output->writeln("<info>[OK]</info> ($last)");
return true;
}
@ -198,4 +258,53 @@ class Generator
return true;
}
/**
* Utilise le template de configuration phpdoc.xml en modifiant ses variables
* et l'enregistre pour qu'il soit utilisé par l'application
*
* @return bool true si réussi.
**/
private function prepareConfigXml() {
$this->output->write("* Préparer le fichier phpdoc.xml ");
$template = $this->dirs['helper'] . '/phpdoc_helper.xml';
$template = file_get_contents($template);
$substitutions = array(
'@DIR_CACHE@' => $this->dirs['cache'],
'@DIR_OUTPUT@' => $this->dirs['output'],
'@DIR_INPUT@' => $this->dirs['input'],
'@DIR_LOG@' => $this->dirs['log'],
'@DIR_ROOT@' => $this->dirs['root'],
);
$template = str_replace(array_keys($substitutions), array_values($substitutions), $template);
$destination = $this->dirs['work'] . '/phpdoc.xml';
@unlink($destination);
if (!@file_put_contents($this->files['phpdoc.xml'], $template)) {
$this->output->writeln("<error>[Echec]</error>");
return false;
}
$this->output->writeln("<info>[OK]</info>");
return true;
}
/**
* Exécute l'application phpDocumentor avec le phpdoc.xml qui a été créé
*
* @return bool true si réussi.
**/
private function execute() {
$conf = $this->files['phpdoc.xml'];
$command = "project:run --config=$conf --parseprivate";
$app = new Application();
$app->run_with_command($command);
}
}

23
src/autodoc/Helpers/phpdoc_helper.xml

@ -3,7 +3,7 @@
<parser>
<default-package-name>SPIP</default-package-name>
<encoding>utf-8</encoding>
<target>work/cache/@PREFIXE@</target>
<target>@DIR_CACHE@</target>
<markers>
<item>TODO</item>
<item>FIXME</item>
@ -14,6 +14,8 @@
<visibility></visibility>
</parser>
<files>
<directory>@DIR_INPUT@</directory>
<ignore-hidden>on</ignore-hidden>
<ignore-symlinks>on</ignore-symlinks>
@ -30,27 +32,30 @@
<ignore>lib/*</ignore>
<ignore>squelettes-dist/*</ignore>
</files>
<transformer>
<target>work/output/@PREFIXE@</target>
<target>@DIR_OUTPUT@</target>
</transformer>
<logging>
<level>warn</level>
<paths>
<default>work/log/@PREFIXE@/phpdoc-{DATE}.log</default>
<errors>work/log/@PREFIXE@/phpdoc-{DATE}.errors.log</errors>
<default>@DIR_LOG@/phpdoc-{DATE}.log</default>
<errors>@DIR_LOG@/phpdoc-{DATE}.errors.log</errors>
</paths>
</logging>
<transformations>
<template name="autodoc/templates/zora" />
<template name="@DIR_ROOT@/autodoc/templates/zora" />
</transformations>
<options>
<description value="Documentation du code PHP de SPIP." />
<presentation value="Cette documentation est extraite à partir du code source de la version de développement." />
<!--
<site value="http://code.spip.net/" />
<proposer value="oui" />
<description value="Documentation automatique du code PHP de SPIP." />
<presentation value="Cette documentation est extraite automatiquement à partir du code source
PHP de la version en développement de SPIP." />
<!--chemin value="autodoc/" / -->
<chemin value="autodoc/" />
-->
</options>
</phpdocumentor>

Loading…
Cancel
Save