'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 ); }