source: spip-zone/_squelettes_/soyezcreateurs_net/plugins_2.1/documentation_a_ne_pas_publier_par_ftp_sur_son_site/svninfo.php @ 58989

Last change on this file since 58989 was 58989, checked in by real3t@…, 9 years ago

Un script PHP permettant de générer un script d'installation de SPIP et de tous les repository SVN utilisés par une installation données (sous réserve qu'elle soit installée par SVN >= 1.7)

Copier ce fichier à la racine du site dont vous voulez obtenir le script d'installation svn
En l'état, ce script ne fonctionnera qu'avec SubVersioN 1.7 minimum (car ce dernier n'a qu'un .svn par repository utilisé).

File size: 2.4 KB
Line 
1<?php
2/*
3
4Copier ce fichier à la racine du site dont vous voulez obtenir le script d'installation svn
5En l'état, ce script ne fonctionnera qu'avec SubVersioN 1.7 minimum (car ce dernier n'a qu'un .svn par repository utilisé).
6
7Inspiré de :
8http://ericlondon.com/scanning-file-system-path-all-version-control-remote-repository-urls
9http://code.dunae.ca/src/svn2zip.php
10*/
11
12// define a path to scan
13$scan_path = __DIR__;
14
15function liste_Dirs($dir,$tofind)
16{
17    $dossier = opendir($dir);
18
19    while($item = readdir($dossier))
20    {
21        $berk = array('.', '..'); // ne pas tenir compte de ses répertoires / fichiers
22
23        if (!in_array($item, $berk))
24        {
25            $new_Dir = $dir.'/'.$item;
26
27            if(is_dir($new_Dir))
28            {
29                if ($item==$tofind) $output .= $new_Dir."\n";
30                                        else $output .= liste_Dirs($new_Dir,$tofind);
31            }
32        }
33    }
34
35
36    return $output;
37}
38
39function get_svn_info($src) {
40        $info = array();
41
42        // run 'svn info' on the repository
43        $cmd = sprintf("svn info %s", escapeshellarg($src), escapeshellarg($tmp_path));
44
45        exec($cmd, $out, $ret);
46       
47        if($ret != 0)
48            exit_with_error('Unable to get repository info');
49
50        $out = implode($out, "\n");
51
52        // extract the revision number
53        if(preg_match('/^revision\:[ ]?([0-9]+)[ ]?$/im', $out, $matches) > 0)
54            $info['revision'] = $matches[1];
55
56        // extract the path
57        if(preg_match('/^URL\:[ ]?(.+)[ ]?$/im', $out, $matches) > 0)
58            $info['svnurl'] = $matches[1];
59       
60                $info['src'] = $src;
61                       
62
63        return $info;
64}
65
66$files = liste_Dirs($scan_path,'.svn');
67
68// explode on "\n"
69$files = explode("\n", $files);
70
71// Directory to exclude
72$dir2exclude[] = '/extensions/compresseur/';
73$dir2exclude[] = '/extensions/filtres_images/';
74$dir2exclude[] = '/extensions/msie_compat/';
75$dir2exclude[] = '/extensions/porte_plume/';
76$dir2exclude[] = '/extensions/safehtml/';
77$dir2exclude[] = '/extensions/vertebres/';
78
79// loop through files
80$repo_list = array();
81foreach($files as $key => $file) {
82
83  $repo_path = substr($file, 0, -4);
84
85  // get svn repo root
86  if ($repo_path) $repo_list[]= get_svn_info($repo_path);
87}
88
89foreach($repo_list as $key => $repo) {
90        $chemin = str_replace($scan_path,'',$repo['src']);
91        if (!in_array($chemin,$dir2exclude))
92                echo 'sleep 15 && svn checkout '.$repo['svnurl'].' .'.$chemin.' -r'.$repo['revision'].'<br />';
93}
94?>
Note: See TracBrowser for help on using the repository browser.