1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| <?php
/**
* @description Initialise les variables et appelle la fonction arborescence()
* Renvoie un tableau a deux dimensions contenant le tableau
* representant l'arborescence et le nombre d'elements du tableau
* @author [DSIT-XIS/SO]
* @date 22/04/2008
* @param $urlPere L'url de la racine de l'arborescence
*/
function dessin_arborescence ($urlPere) {
$k = -1 ;
$l = 0 ;
$tab = array(array(array())) ;
$temp = arborescence ($urlPere, $tab, $k, $l) ;
return $temp ;
}
/**
* @description Parcours une arborescence recursivement.
* Construit un tableau a trois dimensions de type [i][j][donnees] au fur et a mesure
* @author [DSIT-XIS/SO]
* @date 22/04/2008
* @param $urlPere L'url de la racine de l'arborescence
*/
function arborescence ($urlPere, $tab, $k, $l ) {
// --------- FONCTION RECURSIVE -------
// Parcours une arborescence recursivement et construit un tableau a trois dimensions de type [i][j][donnees] au fur et a mesure
$i = $k ;
$j = $l ;
$monTableau = $tab ;
// On regarde le contenu du dossier
exec('ls '.$urlPere.'/',$liste) ;
$monTableau[$i][$j]['type'] = 'dn' ;
$monTableau[$i][$j]['nom'] = 'test' ;
// Pour chaque element contenu dans le dossier racine
foreach ( $liste as $element ) {
$i++ ;
$cpt_modif = 0 ;
$urlElement = $urlPere.'/'.$element ;
// On teste s'il s'agit d'un dossier ou d'un fichier
exec('[ -f \''.$urlElement.'\' ]',$testFichier);
exec('[ -d \''.$urlElement.'\' ]',$testDossier);
//Si l'element est un dossier :
if ( $testDossier == 0 ) {
// On sauvegarde les positions actuelles avant l'appel recursif
$saveJ = $j++ ;
$saveI = $i ;
// Appel recursif a partir du sous-dossier
arborescence ($urlElement, $monTableau, $i, $j) ;
// Si l'element a ete modifie :
if ( $cpt_modif == 1 ) {
// On affecte le type du dossier => 'dm' pour dossier modifie
$monTableau[$saveI][$saveJ]['type'] = 'dm' ;
$cpt_modif++ ; // On increminte le compteur pour signaler que l'execution appelante n'ait pas a resignaler la modification du dossier
}
elseif ( $cpt_modif == 0 ) {
// On affecte le type du dossier => 'dn' pour dossier non-modifie
$monTableau[$saveI][$saveJ]['type'] = 'dn' ;
$cpt_modif-- ; // On decremente le compteur pour que l'execution appelante n'ait pas a resignaler la non modification du dossier
}
// On recupere le nom, la date de derniere modification, le numero de revision de chaque dossier et on les affecte a l'element du tableau
$cpt_arbo = $j+1 ;
exec('ls '.$urlElement.' | grep . | cut -d/ -f2-'.$cpt_arbo, $nom);
exec('svn info '.$urlElement. ' | grep "Last Changed Date" | cut -d: -f2 | cut -d" " -f2', $date) ;
exec('svn info '.$urlElement. ' | grep "Last Changed Rev" | cut -d: -f2 | cut -d" " -f2', $rev) ;
$monTableau[$saveI][$saveJ]['rev'] = $rev ;
$monTableau[$saveI][$saveJ]['date'] = $date ;
$monTableau[$saveI][$saveJ]['nom'] = $nom ;
$monTableau[$saveI][$saveJ]['url'] = $urlElement ;
// On remonte dans l'arborescence et on retabli les variables a leur etat d'avant l'appel recursif
$j-- ;
$saveI-- ;
$saveJ-- ;
}
// Si l'element est un fichier :
elseif ( $testFichier == 0 ) {
// On recupere le nom, la date de derniere modification, le numero de revision de chaque dossier et on les affecte a l'element du tableau
exec('svn info '.$urlElement. ' | grep "Last Changed Date" | cut -d: -f2 | cut -d" " -f2', $date) ;
exec('svn info '.$urlElement. ' | grep "Last Changed Rev" | cut -d: -f2 | cut -d" " -f2', $rev) ;
// On compare la version la plus recente contenue dans le depôt Tags (savegarde) de SubVersioN
exec('svn ls -v -R | sort -r | find -name '.$element.' | grep Reference/ | sort -r | sed -e 2,10d`',$src);
$monTableau[$saveI][$saveJ]['rev'] = $rev ;
$monTableau[$saveI][$saveJ]['date'] = $date ;
$monTableau[$saveI][$saveJ]['url'] = $urlElement ;
$monTableau[$saveI][$saveJ]['nom'] = $element ;
$monTableau[$saveI][$saveJ]['src'] = $src ;
exec('diff '.$urlElement.' '.$src, $modif) ;
// Si l'element a ete modifie :
if ( $modif == 1 ) {
$monTableau[$i][$j]['type'] = 'fm' ;
$cpt_modif++ ; // On increminte le compteur pour signaler que le fichier est modifie
}
else {
$monTableau[$i][$j]['type'] = 'fn' ;
}
}
}
$temp[0] = $monTableau ;
$temp[1] = $i ;
return $temp ;
}
?> |
Partager