source: spip-zone/_plugins_/github_sync/spip-cli/GithubRev.php

Last change on this file was 94712, checked in by booz@…, 3 years ago

path absolu pour svn (spip-cli)

File size: 6.0 KB
Line 
1<?php
2
3use Symfony\Component\Console\Command\Command;
4use Symfony\Component\Console\Input\InputArgument;
5use Symfony\Component\Console\Input\InputInterface;
6use Symfony\Component\Console\Input\InputOption;
7use Symfony\Component\Console\Output\OutputInterface;
8
9class GithubRev extends Command {
10        protected function configure() {
11                $this
12                        ->setName('github:revision')
13                        ->setDescription("\tCommit de fichiers de contenu sur Github (svn status, up, add, commit etc…)\n\t\t\t\tInitialiser avec un dépot Github avec la commande : spip rev -g https://github.com/xx/xx.git\n")
14                        ->setAliases(array(
15                                'rev' // abbréviation commune pour "révision"
16                        ))
17                        ->addOption(
18                                'dest',
19                                'd',
20                                InputOption::VALUE_OPTIONAL,
21                                'Répertoire de destination',
22                                'conversion_spip'
23                        )
24                        ->addOption(
25                                'depot',
26                                'g',
27                                InputOption::VALUE_OPTIONAL,
28                                'Dépot GIT ou synchroniser les conversions',
29                                ''
30                        )                       
31                        ->addOption(
32                                'action',
33                                'a',
34                                InputOption::VALUE_OPTIONAL,
35                                'Actions possibles : up, status, commit, diff, ...',
36                                ''
37                        )                       
38
39                ;
40        }
41
42        protected function execute(InputInterface $input, OutputInterface $output) {
43                global $spip_racine;
44                global $spip_loaded;
45
46                include_spip("iterateur/data");
47
48                $depot = $input->getOption('depot') ;
49               
50                // Répertoire de destination ou l'on effectue le svn checkout (/convertion_spip par défaut).
51                $dest = $input->getOption('dest') ;
52                if(!is_dir($dest)) mkdir($dest);
53                               
54                if ($spip_loaded) {
55                       
56                        chdir($spip_racine);
57                       
58                        exec('/usr/local/bin/svn info ' . $dest , $r);
59                       
60                        // var_dump($dest, $r);
61                       
62                        // vérifions si on a un depot GIT                               
63                        if($r[0] == "Path: $dest"){
64                                $c = inc_ls_to_array_dist($dest . "/*/collections") ;
65                                $collections = $c[0]['dirname'] . "/" . $c[0]['basename'] ;
66                                $dest = "$collections" ;
67                                $output->writeln("<info>Dépot Git OK : $dest</info>");
68                        }else{ // pas de dépot GIT, on checkout
69                                if($depot){
70                                        $output->writeln("<error>Checkout du dépot $depot dans $dest</error>");
71                                        passthru("/usr/local/bin/svn co $depot $dest");
72                                        $output->writeln("<info>Relancez la commande.</info>");
73                                        die() ;
74                                }else{
75                                        $output->writeln("<info>Relancez la commande avec l'option : spip rev -g https://github.com/xx/xx.git</info>");
76                                        die() ;
77                                }       
78                        }
79
80                        if (!function_exists('passthru')){
81                                $output->writeln("<error>Votre installation de PHP doit pouvoir exécuter des commandes externes avec la fonction passthru().</error>");
82                        }
83                        /* Si c'est bon on continue */
84                        else{
85                               
86                                chdir($dest);
87                               
88                                $output->writeln(
89                                        array(
90                                        "<info>C'est parti pour une vérif de commit.</info>"
91                                ));
92
93                                // ou en est-on dans les commit ?
94                                exec('/usr/local/bin/svn up', $results, $err);
95                                                                       
96                                if ($err) {
97                                        $output->writeln(array("<error>Erreur SVN.</error>"));
98                                } else {
99                                        $output->writeln(array(
100                                                        '<info>Update</info>',
101                                                         join("\n", $results)
102                                        ));
103                                }
104                               
105                                $results = array();
106
107                                // Quelques vérifs en svn status.
108                                exec('/usr/local/bin/svn status .', $results, $err);
109                                                                       
110                                if ($err) {
111                                        $output->writeln(array("<error>Erreur SVN.</error>"));
112                                } else {                                               
113
114                                        // Pas de modification de fichier notable => RAS, on quitte.   
115                                        if(sizeof($results) == 0){
116                                                $output->writeln(array(
117                                                         '<info>Status : RAS</info>'
118                                                ));     
119                                                die();
120                                        }
121
122                                        // Sinon détaillons le status
123                                        $output->writeln(array(
124                                                        '<info>Status</info>',
125                                                         join("\n", $results)
126                                        ));
127
128                                        // Ajouts ?
129                                        $results_n = array_filter($results, function ($line) {
130                                                return preg_match(',^\?,', $line);
131                                        });
132
133                                        if (count($results_n) > 0) {
134                                               
135                                                /* nettoyage */
136                                                foreach($results_n as $a){
137                                                        $a = preg_replace("/^\?\s*/", "", $a) ;
138                                                       
139                                                        if(is_dir($a))
140                                                                $dossiers_ajoutes[] = $a ;
141                                                        else
142                                                                $fichiers_ajoutes[] = $a ;
143                                                }
144
145                                                if(sizeof($dossiers_ajoutes) > 0){
146                                                        $output->writeln(array(
147                                                                "<info>Svn add des dossiers</info>",
148                                                                 join("\n", $dossiers_ajoutes)
149                                                        ));
150                                                       
151                                                        foreach($dossiers_ajoutes as $dos){
152                                                                exec("/usr/local/bin/svn add " . $dos, $results, $err);
153                                                                if ($err) {
154                                                                        $output->writeln(array("<error>Erreur SVN add $dos</error>"));
155                                                                } else {
156                                                                        $output->writeln(array(
157                                                                                "<info>Svn add $dos</info>"
158                                                                        ));
159                                                                }
160                                                        }       
161                                                }
162                                                if(sizeof($fichiers_ajoutes) > 0){
163
164                                                        $output->writeln(array(
165                                                                "<info>Svn add des fichiers</info>",
166                                                                 join("\n", $fichiers_ajoutes)
167                                                        ));
168                                                        exec("/usr/local/bin/svn add " . join(" , ", $fichiers_ajoutes), $results, $err);
169                                                        if ($err) {
170                                                                $output->writeln(array("<error>Erreur SVN add fichiers.</error>"));
171                                                        } else {
172                                                                $output->writeln(array(
173                                                                        "<info>Svn add </info>",
174                                                                         join(",", $fichiers_ajoutes)
175                                                                ));
176                                                        }
177                                                }
178                                               
179                                                $output->writeln(array(
180                                                         "<info>Relancez la commande.</info>"
181                                                ));
182                                                die();
183                                        }
184                                                                                       
185                                        // Modif ?
186                                        $results_m = array_filter($results, function ($line) {
187                                                return preg_match(',^M,', $line);
188                                        });
189
190                                        // Ajout ?
191                                        $results_a = array_filter($results, function ($line) {
192                                                return preg_match(',^A,', $line);
193                                        });
194
195                                        // Suppression ?
196                                        $results_d = array_filter($results, function ($line) {
197                                                return preg_match(',^D,', $line);
198                                        });
199
200
201                                        if (count($results_m) > 0 OR count($results_a) > 0 OR count($results_d) > 0) {
202                                               
203                                                if($input->getOption('action') != "commit"){
204                                                        $output->writeln(array(
205                                                                "<error>Des fichiers ont été modifié localement.</error>\n<info> Pour commiter : spip rev -a commit</info>"
206                                                        ));
207                                                        die();
208                                                }else{
209                                                        $output->writeln(array(
210                                                                "<info>Commit…</info>"
211                                                        ));
212
213                                                        exec('/usr/local/bin/svn commit -m "Ajouts de fichiers"', $results, $err);
214                                                        if ($err) 
215                                                                $output->writeln(array("<error>Erreur SVN.</error>"));
216                                                       
217                                                }
218                                        }       
219                                }
220                        }
221
222                }
223                else{
224                        $output->writeln('<error>Vous n’êtes pas dans une installation de SPIP. Impossible de convertir le texte.</error>');
225                }
226        }
227}
Note: See TracBrowser for help on using the repository browser.