[152] | 1 | <?php |
---|
| 2 | |
---|
| 3 | define('_SVN_COMMAND', 'svn'); |
---|
| 4 | |
---|
| 5 | // la fonction qui fait le travail |
---|
| 6 | function update_svn($l) { |
---|
| 7 | $l = trim($l); |
---|
| 8 | |
---|
| 9 | if (!$l OR substr($l,0,1) == '#') return NULL; // commentaires |
---|
| 10 | |
---|
| 11 | $l = explode(' ',$l); |
---|
| 12 | $src = array_shift($l); |
---|
| 13 | $dest = array_shift($l); |
---|
| 14 | |
---|
| 15 | // une revision est numerique ou parmi quelques valeurs connues |
---|
| 16 | // sinon c'est une clause user |
---|
| 17 | $rev = array_shift($l); |
---|
| 18 | if (!is_numeric($rev) AND !in_array($rev,array('HEAD','BASE','COMMITED','PREV'))){ |
---|
| 19 | array_unshift($l,$rev); |
---|
| 20 | $rev=""; |
---|
| 21 | } |
---|
| 22 | |
---|
| 23 | // la clause user est le reste |
---|
| 24 | $user = join(' ',$l); |
---|
| 25 | |
---|
| 26 | if (!preg_match(',^(https?|svn)://,', $src)) |
---|
| 27 | return $src; // erreur |
---|
| 28 | |
---|
| 29 | if (!is_dir($dest)) |
---|
| 30 | mkdir($dest, 0777, 'recursive'); |
---|
| 31 | |
---|
| 32 | if (!is_dir($dest) |
---|
| 33 | OR !is_writable($dest)) |
---|
| 34 | return "Impossible d'ecrire dans ".$dest; // erreur |
---|
| 35 | |
---|
| 36 | // Checkout ? |
---|
| 37 | if (!file_exists($entries = "$dest/.svn/entries")) { |
---|
| 38 | $command[] = "export --force $src/ $dest/"; |
---|
| 39 | $command[] = "checkout $src/ $dest/"; |
---|
| 40 | } |
---|
| 41 | |
---|
| 42 | else { |
---|
| 43 | // nouveau format de .svn/entries |
---|
| 44 | $info = _SVN_COMMAND." info --xml $dest/"; |
---|
| 45 | exec($info, $out); |
---|
| 46 | if (preg_match(',<url>(.*?)</url>,', join('',$out), $r)) { |
---|
| 47 | $old_src = $r[1]; |
---|
| 48 | } else { |
---|
| 49 | // ancien format |
---|
| 50 | $entries = join("\n", file($entries)); |
---|
| 51 | if (!preg_match(',\surl="([^"]+)",', $entries, $r)) |
---|
| 52 | return "fichier .svn/entries non conforme ou illisible"; |
---|
| 53 | $old_src = $r[1]; |
---|
| 54 | } |
---|
| 55 | |
---|
| 56 | // Switch ? |
---|
| 57 | if ($old_src != $src) { |
---|
| 58 | $command[] = "switch --relocate $old_src/ $src/ $dest/"; |
---|
| 59 | } |
---|
| 60 | |
---|
| 61 | // Update |
---|
| 62 | else { |
---|
| 63 | if ($rev) |
---|
| 64 | $command[] = "update --revision $rev $dest/"; |
---|
| 65 | else |
---|
| 66 | $command[] = "update $dest/"; |
---|
| 67 | } |
---|
| 68 | } |
---|
| 69 | |
---|
| 70 | //execute les commandes svn |
---|
| 71 | if ($command) { |
---|
| 72 | //tableaux de résultat |
---|
| 73 | $out = array(); |
---|
| 74 | $out_local = array(); |
---|
| 75 | //parcours les commandes demandées |
---|
| 76 | foreach ($command as $cmd ) { |
---|
| 77 | //redéfini la commande complétement |
---|
[153] | 78 | //$cmd_exec = _SVN_COMMAND." $user ".$cmd; |
---|
[152] | 79 | $cmd_exec = _SVN_COMMAND." $user ".$cmd; |
---|
| 80 | //execute la commande et sauve le resultat dans local_out |
---|
| 81 | exec($cmd_exec,$local_out); |
---|
| 82 | //rappelle la commande executée |
---|
[153] | 83 | //$cmd_aff = _SVN_COMMAND.$cmd; |
---|
[152] | 84 | $cmd_aff = _SVN_COMMAND.$cmd; |
---|
| 85 | array_unshift($local_out, $cmd_aff); |
---|
| 86 | //empile le resultat local à la sortie finale |
---|
| 87 | $out = $out + $local_out; |
---|
| 88 | } |
---|
| 89 | return $out; |
---|
| 90 | } |
---|
| 91 | |
---|
| 92 | } |
---|
| 93 | |
---|
| 94 | function traiter_config_svn($config = array()) { |
---|
| 95 | foreach($config as $l) { |
---|
| 96 | // ne pas afficher l'identification eventuelle |
---|
| 97 | $aff = explode(' ',htmlspecialchars($l)); |
---|
| 98 | while (count($aff)>3) array_pop($aff); |
---|
| 99 | $aff = implode(' ',$aff); |
---|
| 100 | echo "<hr /><b>", $aff, "</b>"; |
---|
| 101 | $res = update_svn($l); |
---|
| 102 | if (is_string($res)){ |
---|
| 103 | include_spip('inc/charsets'); |
---|
| 104 | $res = importer_charset($res); |
---|
| 105 | echo "<br /><b>Erreur: ", |
---|
| 106 | htmlspecialchars($res), |
---|
| 107 | "</b>"; |
---|
| 108 | } |
---|
| 109 | if (is_array($res)){ |
---|
| 110 | include_spip('inc/charsets'); |
---|
| 111 | $res = importer_charset(join("\n", $res),'iso-8859-1'); |
---|
| 112 | echo "<br />".nl2br(htmlspecialchars($res)); |
---|
| 113 | } |
---|
| 114 | echo "<br />\n"; |
---|
| 115 | } |
---|
| 116 | } |
---|
| 117 | |
---|
| 118 | ?> |
---|