123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * Gestion du téléporteur HTTP.
- *
- * @plugin SVP pour SPIP
- * @license GPL
- * @package SPIP\SVP\Teleporteur
- */
-
- /**
- * Téléporter et déballer un composant SVN
- *
- * Déployer un repository SVN depuis une source et une révision données
- *
- * @param string $methode
- * Méthode de téléportation : http|git|svn|...
- * @param string $source
- * URL de la source SVN
- * @param string $dest
- * Chemin du répertoire de destination
- * @param array $options
- * Tableau d'options. Index possibles :
- * - revision => 'nnn'
- * - literal => --ignore-externals
- * @return bool
- * True si l'opération réussie, false sinon.
- */
- function teleporter_svn_dist($methode,$source,$dest,$options=array()){
- if (is_dir($dest)){
- $infos = teleporter_svn_read($dest);
- if (!$infos){
- spip_log("Suppression de $dest qui n'est pas au format SVN","teleport");
- $old = teleporter_nettoyer_vieille_version($dest);
- }
- elseif ($infos['source']!==$source) {
- spip_log("Suppression de $dest qui n'est pas sur le bon repository SVN","teleport");
- $old = teleporter_nettoyer_vieille_version($dest);
- }
- elseif (!isset($options['revision'])
- OR $options['revision']!=$infos['revision']){
- $command = "svn up ";
- if (isset($options['revision']))
- $command .= escapeshellarg("-r".$options['revision'])." ";
- if (isset($options['ignore-externals']))
- $command .= "--ignore-externals ";
- $command .= escapeshellarg($dest);
- spip_log($command,"teleport");
- exec($command);
- }
- else {
- // Rien a faire !
- spip_log("$dest deja a jour (Revision ".$options['revision']." SVN de $source)","teleport");
- }
- }
- if (!is_dir($dest)){
- $command = "svn co ";
- if (isset($options['revision']))
- $command .= escapeshellarg("-r".$options['revision'])." ";
- if (isset($options['ignore-externals']))
- $command .= "--ignore-externals ";
- $command .= escapeshellarg($source)." ".escapeshellarg($dest);
- spip_log($command,"teleport");
- exec($command);
- }
- // verifier que tout a bien marche
- $infos = teleporter_svn_read($dest);
- if (!$infos) return false;
- return true;
- }
- /**
- * Lire source et révision d'un répertoire SVN
- * et reconstruire la ligne de commande
- *
- * @param string $dest
- * Chemin du répertoire SVN
- * @param array $options
- * Options
- * @return array|string
- * Chaîne vide si pas SVN ou erreur de lecture,
- * Tableau sinon avec les index :
- * - source : URL de la source SVN
- * - revision : numéro de la révision SVN
- * - dest : Chemin du répertoire
- */
- function teleporter_svn_read($dest,$options=array()){
- if (!is_dir("$dest/.svn"))
- return "";
- // on veut lire ce qui est actuellement deploye
- // et reconstituer la ligne de commande pour le deployer
- exec("svn info ".escapeshellarg($dest),$output);
- $output = implode("\n",$output);
- // URL
- // URL: svn://trac.rezo.net/spip/spip
- if (!preg_match(",^URL[^:\w]*:\s+(.*)$,Uims",$output,$m))
- return "";
- $source = $m[1];
- // Revision
- // Revision: 18763
- if (!preg_match(",^R..?vision[^:\w]*:\s+(\d+)$,Uims",$output,$m))
- return "";
- $revision = $m[1];
- return array(
- 'source' => $source,
- 'revision' => $revision,
- 'dest' => $dest
- );
- }
|