3 * Gestion du téléporteur HTTP.
5 * @plugin SVP pour SPIP
7 * @package SPIP\SVP\Teleporteur
11 * Téléporter et déballer un composant SVN
13 * Déployer un repository SVN depuis une source et une révision données
15 * @param string $methode
16 * Méthode de téléportation : http|git|svn|...
17 * @param string $source
18 * URL de la source SVN
20 * Chemin du répertoire de destination
21 * @param array $options
22 * Tableau d'options. Index possibles :
24 * - literal => --ignore-externals
26 * True si l'opération réussie, false sinon.
28 function teleporter_svn_dist($methode,$source,$dest,$options=array()){
30 $infos = teleporter_svn_read($dest);
32 spip_log("Suppression de $dest qui n'est pas au format SVN","teleport");
33 $old = teleporter_nettoyer_vieille_version($dest);
35 elseif ($infos['source']!==$source) {
36 spip_log("Suppression de $dest qui n'est pas sur le bon repository SVN","teleport");
37 $old = teleporter_nettoyer_vieille_version($dest);
39 elseif (!isset($options['revision'])
40 OR $options['revision']!=$infos['revision']){
42 if (isset($options['revision']))
43 $command .= escapeshellarg("-r".$options['revision'])." ";
44 if (isset($options['ignore-externals']))
45 $command .= "--ignore-externals ";
47 $command .= escapeshellarg($dest);
48 spip_log($command,"teleport");
53 spip_log("$dest deja a jour (Revision ".$options['revision']." SVN de $source)","teleport");
59 if (isset($options['revision']))
60 $command .= escapeshellarg("-r".$options['revision'])." ";
61 if (isset($options['ignore-externals']))
62 $command .= "--ignore-externals ";
63 $command .= escapeshellarg($source)." ".escapeshellarg($dest);
64 spip_log($command,"teleport");
68 // verifier que tout a bien marche
69 $infos = teleporter_svn_read($dest);
70 if (!$infos) return false;
76 * Lire source et révision d'un répertoire SVN
77 * et reconstruire la ligne de commande
80 * Chemin du répertoire SVN
81 * @param array $options
83 * @return array|string
84 * Chaîne vide si pas SVN ou erreur de lecture,
85 * Tableau sinon avec les index :
86 * - source : URL de la source SVN
87 * - revision : numéro de la révision SVN
88 * - dest : Chemin du répertoire
90 function teleporter_svn_read($dest,$options=array()){
92 if (!is_dir("$dest/.svn"))
95 // on veut lire ce qui est actuellement deploye
96 // et reconstituer la ligne de commande pour le deployer
97 exec("svn info ".escapeshellarg($dest),$output);
98 $output = implode("\n",$output);
101 // URL: svn://trac.rezo.net/spip/spip
102 if (!preg_match(",^URL[^:\w]*:\s+(.*)$,Uims",$output,$m))
108 if (!preg_match(",^R..?vision[^:\w]*:\s+(\d+)$,Uims",$output,$m))
115 'revision' => $revision,