IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] PHP + Linux + SVN - Besoin d'aide sur des petits points


Sujet :

Langage PHP

  1. #1
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut [Système] PHP + Linux + SVN - Besoin d'aide sur des petits points
    Bonjour, déjà, merci d'avoir cliqué sur cette discussion, vous allez surement pouvoir m'aider ^^


    Pour commencer, je vais résumer la situation :

    Je développe une application Web en PHP afin de ( pour le moment ) afficher l'arborescence d'un dépot SVN ( Subversion ). Le truc, c'est qu'il faut que je fasse ressortir les fichiers qui ont été modifiés. Pour ça, j'ai fait un p'tit script ( qui marche sous UNIX, en bash ) que j'ai commenté ( ci dessous ), mais j'ai pas encore pu le tester en PHP pour la simple est bonne raison que je n'ai pas ( encore ) les accès au serveur PHP, donc c'est juste pour des points techniques, s'il manque des déclarations, ";" ou autre, osef !

    Pour mon arborescence, qui est une fonction récursive, j'ai choisi de la faire dans un tableau à 2D pour que ça donne qqchose comme ça : ( version simplifiée )

    i\j | ---- 0 | -------1| -------2 | .....
    0 | Tags / | --------| -------- | ....
    1 | -------| Projet1/ | ------- | ---------- | Projet2 / | ----------- | ....
    2 | -------| --------| toto.txt | tagada.txt | ---------| toto_v2.txt | ....

    ( désolé c'est pas forcément très lisible, mais j'ai fait du mieux que je pouvais ! )
    function arborescence ($url_pere) {

    exec("ls ".$url_pere."/",$liste) ; // exec() sert à lancer des commandes Unix depuis PHP, en théorie....

    foreach ( $liste as $element ) {

    $i++ ;
    cpt_modif = 0 ;
    $url_element = $url_pere."/".$element ;

    exec("[ -f \"".$url_element."\" ]",$test_fichier);
    exec("[ -d \"".$url_element."\" ]",$test_dossier);

    //Si l'élément est un dossier :
    if ( $test_dossier == 0 ) {

    $cpt_arbo++ ; // Ce compteur doit être une variable globale initialisée à 2
    $saveJ = $j++ ;
    $saveI = $i++ ;

    // Je peux afficher ici le nom du dossier, avant l'appel, comme ça il sera avant, mais je ne connaitrais pas son statut (modifié/pas modifié)
    arborescence ($url_element) ; // Appel récursif à partir du sous-dossier

    $i = --$saveI ;
    $j = --$saveJ ;

    // Si l'élément a été modifié :
    if ( $cpt_modif == 1 ) {

    //Je récupère son nom parmis l'url complète, ex : /Work/Tags/Projet1/, je récupère Projet1 uniquement

    exec($url_element." >> url_temp") ;
    exec("grep . url_temp | cut -d/ -f2-".$cpt_arbo."", $temp);
    $monTableau[$saveI][$saveJ] = "dm ".$temp ; // les deux premières lettres correspondent au statut : d pour dossier, m pour modifié
    exec("rm url_temp") ;
    $cpt_modif++ ; // On incréminte le compteur pour signaler que l'exécution appelante n'ait pas à resignaler la modification du dossier
    }
    elseif ( $cpt_modif == 0 ) {


    // Idem si le dossier n'a pas été modifié, on change juste les deux premieres lettre de son nom en "dn" pour "non modifié", ça correspond au statut du dossier
    }
    $cpt_arbo-- ;
    $j-- ;
    }
    // Si l'élément est un fichier :
    elseif ( $test_fichier == 0 ) {

    // On compare la version la plus récente contenue dans le dépôt Trunk (courant) de SubVersioN
    exec("diff ".$url_element." `svn ls -v -R | sort -r | find -name ".$element." | grep Trunk/ | sort -r | sed -e 2,10d`", $modif) ;

    // Si l'élément a été modifié :
    if ( $modif == 1 ) {

    $monTableau[$i][$j] = "fm ".$element ;
    $cpt_modif++ ; // On incréminte le compteur pour signaler que le fichier est modifié
    }
    else {
    $monTableau[$i][$j] = "fn ".$element ;
    }
    }
    }

    }
    J'ai testé l'algo "arborescence" en shell, il fonctionne sans pb (par contre j'affiche que le dossier est modifié après les fichiers qu'il contient), même si en php j'ai peut-être des erreurs de syntaxe.

    Par contre, avec mon algo, je ne peux tester si un dossier a été modifié QU'une fois que j'ai regardé son contenu ( si au moins un fichier a été modifié ). Du coup, je suis obligé de faire qq bricolages pour que mon dossier soit situé avant dans monTableau ( d'où les saveI et saveJ ) et donc dans mon arborescence.

    Mon pb, c'est que derrière ça, pour respecter le modèle MVC, j'ai une vue qui tente d'acceder à monTableau.

    L'autre façon, ça aurait été de rentrer mon dossier AVANT, mais dans ce cas, je ne sais pas s'il a été modifié, et il faudrait que je teste dans ma vue si un des fichiers qui suit (au moins) est modifié pour décider du statut de mon dossier.....bref, ça serait un peu nawak, déjà que là....

    Et voici ma vue :

    $monTableau = array(array()) ;
    $monTableau = desssin_arborescence($_POST['url_pere'], $_POST['arg']) ;


    echo "<uL>" ;
    foreach $monTableau as $cellule {
    if ( $cellule != NULL ) {
    $type = substring($cellule, 0, 2) ;
    $nom = substring($cellule, 3) ;

    $i = getAttribute($cellule, '$i') ;
    $j = getAttribute($cellule, '$j') ;

    if ( $monTableau[i-1][j-1] != NULL )
    echo "<uL>" ;

    switch ( $type ) {
    case "dn":
    echo "<li><img = src='images/dossier_non_modifie' alt='".$nom." est un dossier non modifi&eacute;".$nom."</li>" ; break ;
    // Gestion des autres cas
    }

    if ( $monTableau[i+1][j+1] != NULL )
    echo "</uL>" ;
    }
    echo "<uL>" ;
    }
    Le pb, c'est que je ne suis pas du tout sûr de pouvoir accéder aux indices de $cellule contenue dans monTableau[][] dans cette vue, je ne suis pas du tout sur que getAttribute() serve à ça, et encore moins qu'elle marcherait dans mon cas. Ce qui fait que je ne peux pas récuppérer les indices i et j, et du coup, ça ne me permet pas de revenir tester où je suis dans mon arborescence.


    En résumé, c'est un peu la pagaille dans mon code. Mon soucis c'est plutôt de savoir si j'ai une meilleure façon de faire que celle que j'utilise actuellement, parceque ça me complique pas mal....


    Le topic est long, et compliqué, mais j'espère que quelqu'un aura la sympathie de passer qq minutes dessus. Merci d'avance !

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    hmmm je capte pas bien tout ce que tu veux faire mais d'après ce que j'ai lu, dans ton premier code tu as un soucis...

    Tu veux faire appel à ta fonction de manière récursive en fonction de la valeur de $cpt_modif, or... $cpt_modif = TOUJOURS 0 vu qu'en début de fonction tu écris

    $cpt_modif = 0;


  3. #3
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Je n'ai pas précisé, mais il y a des variables locales et globales, dont cpt_arbo qui est globale.

    Pour cpt modif, j'avoue qu'effectivement, ça ne devrait pas marcher :S
    Mais la magie d'Unix..... lol
    En changeant de place cette affectation, en la mettant par exemple juste avant l'appel récursif, ça ne fonctionne plus ( enfin, ça ne marche plus pour tous ).

    J'avais eu un pb dessus, mais je ne me rapppelle plus pk j'ai du mettre cette affectation ici, faudrait que je vérifie. M'enfin, c'est pas tant mon pb, l'algo marche, c'est juste que je doute de la methodologie.

    Pour réexpliquer ce que je veux faire :

    Je veux afficher une arborescence d'un dépot SVN, si vous ne connaissez pas, c'est un logiciel de versionning. En résumé, il s'organise selon 3 répertoire : Trunk, le tronc commum, Tags, qui sont les sauvegardes, et Branche qui est la partie expérimentale, où on fait les principaux développement. SVN permet qq fonctionnalités, mais en gros son boulot c'est d'organiser, gérer les sauvegardes, MaJ, et d'affecter des numéros de révisions ( qui permettent de savoir de quand date un fichier ou un MaJ ).
    En gros, t'as un fichier config.php dasn Trunk/, à la révision 0 il vaut "XXXX : 1965". Tu sauvegarde la révision 0 dans Tags/ .Si tu le modifie en "XXXX : 1578", tu seras à la révision 1. Et donc la version 0 contenue dans Tags ne sera plus à jour.

    Ce que je veux, c'est tester si mon contenu du répertoire Tags est à jour ou pas, par rappport au répertoire Trunk ( courant ). La partie du test de la modif du fichier, c'est une façon détourner via Unix de faire ce que SVN ne peut/veut pas faire ( ie comparer deux fichiers contenus dans deux répertoires distincts, SVN ne veut le faire qu'entre deux révisions d'un même fichier ).

    Au final, j'ai plus besoin d'aide sur le "comment faire" que sur le "ça marche pas ton algo", puisque je sais comment je peux faire ( à peu près, faut juste que je recherche un peu plus les bonnes fonctions), c'est juste qu'à mon avis c'est pas du tout optimal, c'est plutôt du bidouillage....

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Bonjour !

    Bon, j'ai fais pas mal de modif depuis hier :

    J'ai créé mon controleur ( bêtement appelé index.php ), créé une vue FrontView découpée en plusieurs partie, dont VueArbo qui contient le code pour afficher l'arborescence.

    J'ai installé un p'tit EasyPHP pour tester mon code et ça marche, par contre j'ai changé pas mal de points : plus de foreach mais un simple for avec parcours "intelligent" ( par rapport à mon tableau de base montré plus haut, il ne parcours pas l'intégralité, ce qui limite les pertes de temps ).

    Mon modèle MVC est implémenté à la va vite, mais en théorie j'dois pas être loin. Le seul truc qu'il me reste à tester c'est le script arborescence, contenu dans Model_Arborescence, que je ne lance pour le moment pas ( j'suis pas sur le serveur contenant le dépot, donc ça risque de faire grand chose ^^ ). Du coup j'ai déclaré un tableau 2D en dur, qui est l'équivalent de ce que doit me renvoyer arborescence.

    J'ai joint les fichiers, si y en a qui veulent jeter un coup d'oeil pour me donner leur avis je suis prenneur
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Besoin d'aide sur des requetes
    Par lamorkytu dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/01/2008, 05h31
  2. besoin d'aide sur des warnings
    Par salseropom dans le forum C
    Réponses: 12
    Dernier message: 07/11/2007, 10h01
  3. Besoin d'aide sur 3 petits programmes en Cobol
    Par gecko64 dans le forum Cobol
    Réponses: 2
    Dernier message: 12/09/2007, 22h30
  4. [VB6 + Excel] besoin d'aide sur 3 petits points
    Par Mackouacloth dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/07/2007, 16h09
  5. [Regex] besoin d'aide sur des motifs
    Par Oluha dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 25/11/2005, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo