Changeset 74968 in spip-zone


Ignore:
Timestamp:
Aug 26, 2013, 2:16:48 PM (6 years ago)
Author:
marcimat@…
Message:

On avance dans l'application d'aide : ça télécharge la source svn indiquée…

Location:
_galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Command/FromSvn.php

    r74941 r74968  
    2525            ->setDescription("Exécuter l'autodoc sur une source SVN donnée")
    2626            ->addArgument('source', InputArgument::REQUIRED, "URL de la source SVN")
     27            ->addOption('prefixe', 'p', InputOption::VALUE_OPTIONAL, 'Préfixe servant au stockage des données', 'default')
     28
    2729            #->addArgument('source', InputArgument::OPTIONAL, "URL de la source SVN")
    2830            #->addOption('yell', null, InputOption::VALUE_NONE, 'If set, the task will yell in uppercase letters')
  • _galaxie_/code.spip.net/autodoc/trunk/src/autodoc/Helpers/Generator.php

    r74941 r74968  
    4949    **/
    5050    public function generateFromSvn($source) {
    51         $prefixe = 'default';
     51        $prefixe = $this->input->getOption('prefixe');
    5252        $this->createDirectories($prefixe);
    53     }
     53        $this->getSvnSource($source);
     54    }
     55
    5456
    5557    /**
     
    6163    private function createDirectories($prefixe) {
    6264        $_work = $this->dirs['work'];
    63         $this->output->writeln("* Vérifier/créer les répertoires de travail dans <info>$_work</info>.");
    64 
    65         $this->createDirectory("output/$prefixe");
    66         $this->createDirectory("input/$prefixe");
    67         $this->createDirectory("log/$prefixe");
    68         $this->createDirectory("cache/$prefixe");
    69     }
     65        $this->output->writeln("* Vérifier/créer les répertoires de travail dans <info>$_work</info>");
     66
     67        $this->dirs['output'] = $_work . '/' . "output/$prefixe";
     68        $this->dirs['input']  = $_work . '/' . "input/$prefixe";
     69        $this->dirs['log']    = $_work . '/' . "log/$prefixe";
     70        $this->dirs['cache']  = $_work . '/' . "cache/$prefixe";
     71
     72        foreach (array('output', 'input', 'log', 'cache') as $dir) {
     73            if (!$this->createDirectory( $this->dirs[$dir] )) {
     74                return false;
     75            }
     76        }
     77
     78        return true;
     79    }
     80
    7081
    7182    /**
     
    7889    **/
    7990    private function createDirectory($dir) {
    80         $_dir = $this->dirs['work'] . '/' .  $dir;
    81         if (!is_dir($_dir)) {
     91        if (!is_dir($dir)) {
    8292            $this->output->writeln("  - Création du répertoire <info>$dir</info>");
    8393
    8494            if (!@mkdir($_dir, 0755, true)) {
    85                 $this->output->writeln("<error>Impossible de créer le répertoire : $_dir</error>");
     95                $this->output->writeln("<error>Impossible de créer le répertoire : $dir</error>");
    8696                $error = error_get_last();
    8797                $this->output->writeln($error['message']);
     
    90100
    91101        }
    92         if (!is_writable($_dir)) {
    93             $this->output->writeln("<error>Le répertoire $_dir n'est pas accessible en écriture</error>");
     102        if (!is_writable($dir)) {
     103            $this->output->writeln("<error>Le répertoire $dir n'est pas accessible en écriture</error>");
    94104            return false;
    95105        }
     
    97107    }
    98108
     109
     110    /**
     111     * Télécharge ou met à jour la source SVN indiquée
     112     *
     113     * @param string $source URL de la source SVN
     114     * @return bool true si réussi
     115    **/
     116    private function getSvnSource($source) {
     117        $this->output->writeln("* Obtenir <info>$source</info>");
     118
     119        // si c'est en svn et le bon, on fait svn up simplement.
     120        if ($res = $this->makeSvnCommand('info --xml')) {
     121            // nous avons un svn… verifions que c'est le bon !
     122            $xml = simplexml_load_string(implode("", $res));
     123            $source_actuelle = (string)$xml->entry->url;
     124
     125            if ($source_actuelle == $source) {
     126                $this->output->write("<comment>  - Update    </comment>");
     127
     128                if (!$res = $this->makeSvnCommand("update")) {
     129                    $this->output->writeln("[<error>Echec</error>]");
     130                    return false;
     131                }
     132
     133                $last = array_pop($res);
     134                $this->output->writeln("[<info>OK</info>]  ($last)");
     135                return true;
     136            }
     137        }
     138
     139        // erreur, donc pas un dossier svn ou pas le bon
     140        // on nettoie le contenu pour svn co
     141        $this->deleteDirectoryContent($this->dirs['input']);
     142
     143        $this->output->write("<comment>  - Checkout    </comment>");
     144
     145        if (!$this->makeSvnCommand("checkout $source .")) {
     146            $this->output->writeln("[<error>Echec</error>]");
     147            return false;
     148        }
     149
     150        $last = array_pop($res);
     151        $this->output->writeln("[<info>OK</info>]  ($last)");
     152        return true;
     153    }
     154
     155
     156    /**
     157     * Exécuter la commande svn indiquée
     158     *
     159     * @param string $cmd Commande SVN
     160     * @param bool $no_error true : Envoie les erreurs dans /dev/null
     161     * @return mixed|bool false en cas d'erreur
     162    **/
     163    private function makeSvnCommand($cmd, $no_error = true) {
     164        $dir = $this->dirs['input'];
     165        $svn = '/usr/bin/svn';
     166        $no_error = $no_error ? '2> /dev/null' : '';
     167
     168        exec("cd $dir && $svn $cmd $no_error", $res, $error);
     169        if ($error) return false;
     170        return $res;
     171    }
     172
     173
     174    /**
     175     * Suppression du contenu d'un repertoire.
     176     *
     177     * @link http://www.php.net/manual/en/function.rmdir.php#92050
     178     *
     179     * @param string $dir Chemin du repertoire
     180     * @param string $delete_me Supprimer aussi le répertoire ?
     181     * @return bool Suppression reussie.
     182     */
     183    function deleteDirectoryContent($dir, $delete_me = false) {
     184        if (!file_exists($dir)) return true;
     185        if (!is_dir($dir) || is_link($dir)) return @unlink($dir);
     186       
     187        foreach (scandir($dir) as $item) {
     188            if ($item == '.' || $item == '..') continue;
     189            if (!supprimer_repertoire($dir . "/" . $item, true)) {
     190                @chmod($dir . "/" . $item, 0777);
     191                if (!supprimer_repertoire($dir . "/" . $item, true)) return false;
     192            };
     193        }
     194
     195        if ($delete_me) {
     196            return @rmdir($dir);
     197        }
     198
     199        return true;
     200    }
    99201}
Note: See TracChangeset for help on using the changeset viewer.