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 |
---|
78 | //$cmd_exec = _SVN_COMMAND." $user ".$cmd; |
---|
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 |
---|
83 | //$cmd_aff = _SVN_COMMAND.$cmd; |
---|
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 | ?> |
---|