source: trunk/spip/esqueleto-redcta/plugins/svn_update-redcta-spip-2-0/inc/svn_update.php @ 397

Last change on this file since 397 was 153, checked in by guille, 16 years ago

se corrigio bug de nombres de archivos

File size: 3.1 KB
Line 
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?>
Note: See TracBrowser for help on using the repository browser.