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

Contribuez .NET Discussion :

SSBranchManager - Outil de Fusion de Branches pour SourceSafe


Sujet :

Contribuez .NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut SSBranchManager - Outil de Fusion de Branches pour SourceSafe
    Bonjour à tous,

    Je travaille avec Visual SourceSafe et dernièrement, j'ai eu besoin de créer des branches. Cette étape est très simple, cependant, la fusion de branches n'est pas très facile à gérer via SourceSafe.

    J'ai fait quelques recherches et je suis tombé sur un outil (SSMergeBranchs) développé par un membre du forum. Cet outil, bien que très abouti, est très lent lorsqu'on a beaucoup de fichiers (30h d'analyse pour 6500 fichiers avant de pouvoir lancer la fusion).

    Etant donné que je suis amené à fusionner des branches très régulièrement, j'ai développé mon propre outil en C# (.NET).

    Celui-ci permet de :

    • Détecter les ajouts/suppressions entre une branche source et une branche cible
    • Détecter les fichiers différents entre deux branches
    • Fusionner les fichiers d’une branche sur une autre
    • Générer des rapports détaillés de fusion (Historique des fusions effectuées)

    Je pense que ça pourra être utile, donc en PJ, les sources.

    L'outil est paramétrable via un fichier XML (et par l'IHM). Si vous avez des questions ou des suggestions, n'hésitez pas.

    Prochaines améliorations prévues :
    • Gestion d'un l'historique des fusions pour éviter de proposer une fusion si le fichier source n'a pas changé depuis la dernière fusion
    • Possibilité de sauvegarder les paramètre de l'IHM dans un fichier xml de configuration
    • Gestion des fichiers liés lorsqu'on ajoute un fichier de la branche source vers la branche cible

    NB : Pour utiliser cet outil, vous devez avoir installé :
    • Le client SourceSafe
    • kdiff3 (un outil de merge gratuit)

    A+

    Cyril SACENDA
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Salut Cyril
    Je mets le lien vers le topic "amis" écris en vbs : ici.

    Une petite question : jusqu'où as-tu repris le code du script vbs ? Car pour la fusion de branche et la gestion des ancètres commun c'est hyper complexe et j'y ai passé un temps très important. Le plus important n'est pas qu'il soit RAPIDE mais bel et bien qu'il soit FIABLE.

    As-tu utilisé automation ? Ou directement analysé le résultat des commandes SS.EXE ?
    As-tu géré l'historique des reports et la gestion des derniers reports ? Sinon un deuxième merge va faire n'importe quoi...
    As-tu géré le report des commentaires des checks-in ? (a priori oui)

    Vu le temps que j'y ai passé, je ne sais pas en combien de temps tu as fait cela mais tu as été très rapide...

    En tout cas, si tu as des questions n'hésite pas...

    Amicalement, Stéphane Château

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Salut Stéphane !

    Ben en fait je suis reparti de zéro et je n'ai pas utilisé la même méthode que toi, enfin pas pour tout je pense.

    En gros je fais un get en local des deux branches et
    je compare les fichiers (contenu binaire) pour ne prendre en compte que ceux qui ont changés (cette étape prends 5min pour mes 6500 fichiers). Ça me permet de restreindre les accès sourcesafe qui sont très longs.

    J'ai pas mal de fichiers liés sur sourcesafe, du coup (si l'option est activée) je ne récupère qu'une seule occurence dans la liste des fichiers modifies.

    A la fin j'ai une liste de fichiers modifiés (cette liste sera encore restreinte lorsque je prendrai en compte l'historique des merge).

    C'est lorsque tu cliques sur fusionner les fichiers que je récupère l'ancetre commun et que je fais le merge avec kdiff3 puis les Check-in avec commentaires (j'ai pris le même modèle que toi, je trouvais ca top ).

    Sinon je n'utilise que automaion, sauf pour retrouver l'ancetre commun, la j'utilise ss.exe et je parse le résultat de la console pou trouver a quel version on a fait le branch depuis la cible vers la source (je ne merge que dan ce sens par contre).

    En ce qui concerne l'historique des reports, ça pourrait me faire gagner du temps effectivement et je compte le mettre en place. Après, étant donne que je pars du principe que l'ancetre commun ne change pas (toi aussi non?) après plusieurs merge, on part de plus loin, mais je n'ai pas de problème (je bosse avec trois branches et il y a 10 developpeurs qui bossent à temps plein sur toutes les branches.

    Je pense y avoir passé quand même 30-40h heures, c'est pas rien
    Après je ne me suis pas basé sur ton code mais sur le fonctionnement de ton programme, ça m'a fait gagné beaucoup de temps !

    Aussi, mon ihm est ridicule comparée à la tienne, j'imagine que ça a du te prendre enormement de temps !

    Enfin bon, pour l'instant les fusions fonctionnent très bien, et quand j'aurai implémenté 2-3 autres trucs ça devrait être pas mal. Après c'est plus rapide, mais moins poussé que ce que tu as fait ! :p

    Si t'as le temps de me donner ton avis d'expert, ça m'intéresse !

    A bientôt,

    Cyril Sacenda

  4. #4
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    En gros je fais un get en local des deux branches et je compare les fichiers (contenu binaire) pour ne prendre en compte que ceux qui ont changés (cette étape prends 5min pour mes 6500 fichiers). Ça me permet de restreindre les accès sourcesafe qui sont très longs.
    Voila une énorme différence entre ta version et la mienne :
    1> La hiérarchie des branches source / destination peut ne pas être respectée, dans mon cas le fichier de la branche source sera retrouvé, pas dans le tien
    2> Le fichier fusionné peut avoir été renommé mais continue d'être lié, avec SS.EXE je sais retrouver l'ancètre commun et le fichier dans la branche source, pas toi.
    3> Imagine, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Branche A
           |
       (1) Fichier 1 v1
           |
       (2) Fichier 1 v2
           |
           |------------------- Branche B
           |                       |
           |                  (4) Fichier 1 v2 (le branchement cré une copie)
           |                       |
           |                  (5) Fichier 1 v3
           |                       |
    Ton fichier 1 n'a pas besoin d'être fusionné puisque la version côté destination est plus récente mais côté source elle n'a pas évoluée depuis l'ancètre commun (depuis le début de la branche).
    Avec ton système tu verras ce fichier comme devant être fusionné car les fichiers ne seront pas identiques mais pas avec mon système puisque je ne me base pas sur le contenu.
    4> Pour la comparaison il pourra être intéressant de supprimer les commentaires de début de fichiers des deux fichiers avant de les comparer, car les commentaires auto-générés par SourceSafe (très bien) mais ça fout vraiment la merde dans les comparaisons ! ---> Aide toi de mon expression régulière de la mort qui tue pour supprimer le code qui ne sert à rien de début de fichier...
    En ce qui concerne l'historique des reports, ça pourrait me faire gagner du temps effectivement et je compte le mettre en place
    Ca va être rapidement obligatoire : l'historique des reports (que je n'utilise pas encore mais que je génère) ET les dernières versions de chaque reports -> L'intégrer aussi dans SS est un gros travail (surtout l'intégration automatique) !
    En effet, lorsque tu auras fait un premier merge, ton fichier source ET ton fichier destination seront a jamais différents car la version destination contient souvent plus de code que va version de la branche source (dans une version en cours de dev, celle-ci évolue plus vite que la branche qui lui a donnée naissance).

    Bien sur je te donne tout loisir de pomper honteusement tout le code nécessaire à partir du script, te gène pas, vu le temps que j'y ai passé, c'est bien de pas refaire le taf deux fois...
    C'est lorsque tu cliques sur fusionner les fichiers que je récupère l'ancetre commun et que je fais le merge avec kdiff3 puis les Check-in avec commentaires (j'ai pris le même modèle que toi, je trouvais ca top ).
    Pour le reports des commentaires lors du merge ? Avec le macro langage ? Je trouvais ça bien mais un peu complexe, je l'ai expliqué mais je ne sais pas si c'est vraiment clair...

    Attention aux accès concurents lors du merge !!! Sinon ça plante tout
    1> Aux fichiers de reports (qui doivent être accessibles par tout le monde)
    2> Aux fichiers eux mêmes qui peuvent être check-in entre la détection et le merge (ça aussi je le gère)

    Tu as la possibilité dans SS de faire des check-ou exclusifs !!

    Concernant la génération de l'arbre, en effet c'est très long : pas mal de temps pour générer un arbre de 6500 noeuds (c'est du vbs) mais c'est la détection des ancètres et la détection du fichier que l'on veut fusionner dans la branche source qui prend énormément de temps, AUTOMATION est très lent ! Avec SS.EXE je suis plus souple que la précédente méthode utilisée (Il y a deux versions de recherche d'ancètre commun via automaton et SS.EXE) car je peux retrouver l'ancètre et le fichier source même si leurs nom n'est plus le même et la recherche est plus fiable. De plus avec SS.EXE j'ai gagné environ 30% de temps par rapport à la précédente version.... J'ai optimisé / optimisé mais là, je ne sais plus quoi faire de plus...
    Une solution que je pourrais envisager serait de mémoriser dans un fichier ini les noms des fichiers source / destination par rapport à un report branche à branche et construire des indexs qui me permettrait, une fois cet index construit, de connaitre, pour chaque fichier de la branche source destination quel est le chemin du fichier dans la branche source et quel est l'ancètre commun : tu le lance une fois (30 heures de calculs) mais une fois cet index généré, plus besoin de SS.EXE et des 1.5 secondes par fichier analysé...

    Un truc TRES bizarre : 16 secondes / fichier ça me parait énorme !
    Il faut générer l'arbre de 6500 noeuds (combien de temps ?), normalement y'en a pour 15/30 minutes peut être...
    L'analyse c'est normalement 2 secondes MAX par noeud, ou alors ton réseau est vraiment très lent !

    Avec la dernière version du script, tu peux aussi faire l'analyse des fichiers à la demande (pas tout), ça permet d'être plus ciblé et de ne rechercher à merger que ce que tu sais qui a changé...

    Bon voila, pas mal de pistes et de trucs intéressant, 1h30 pour écrire ce message, je vais me coucher !

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Salut Stéphane,

    Désolé, beaucoup de boulo en ce moment, je n'ai pas pris le temps de répondre.

    Effectivement, je ne gère pas si on déplace des fichiers. C'est pas trop problématique pour moi pour l'instant, mais je vais devoir y palier ! Ce sera une des futures évolutions ! Etant donné que je suis capable de récupérer les fichiers ajoutés ou supprimés sur les branches, je dois pouvoir vérifier ensuite s'ils sont liés à d'autres et fusionner les bons fichiers. A voir.

    Pour les commentaires de début de fichiers, je ne vois pas trop de quoi tu parles :s Moi je n'en ai pas...

    Sinon j'ai mis en place l'historique des merges et ça fonctionne très bien ! Tout est automatiquement archivé sur SourceSafe. Je n'ai eu aucun problème à mettre ça en place. Pas de problème avec les droits ni rien.

    Il me reste aussi à ne pas proposer la fusion si le fichier de la branche source n'a pas évolué depuis la création de la branche. Ca ce n'est pas super compliqué. Mais bon, ça ne pose pas de problème en soit, jsute une petite perte de temps.

    Pas de problème non plus d'accès concurrents, en fait j'envoie un mail à tout le monde pour dire de ne pas faire de check-in pendant la phase de merge !

    Pour les 16 secondes par fichier, en fait j'ai constaté que c'était seulement lorsque le fichier est lié à beaucoup d'endroits. Du coup il y a pleins de trucs dans Path et ça prend du temps de tout récupérer. Sinon c'est beaucoup plus rapide ! :p Après c'est seulement lors du merge, pas à la construction de l'arbre, du coup on ne le fait pas pour tous les fichiers

    Sinon, quand tu fusionnes, ça t'arrive d'avoir des fichiers avec pleins de conflits et de passer beaucoup de temps dessus ? Moi parfois c'est long.

    Aussi, je galère parfois lorsque je re-fusionne un fichier que j'avais précédemment fusionné, même s'il n'y a pas eu de grosses modifications entre temps... Normal non ?

    Sinon dans l'ensemble, on travaille avec trois branches et ça marche vraiment pas mal !

    En tout cas, merci beaucoup pour tes conseils, c'est super sympa ! J'avoue que je n'aurai pas penser à tout ça avant de tomber sur le problème !

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2005
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Nouvelle version de SSBranchManager
    J'ai apporté bon nombre d'améliorations à SSBranchManager. Si vous êtes intéressé, n'hésitez pas à me contacter.

Discussions similaires

  1. [Outils] Un gestionnaire de versions pour BDD ?
    Par davcha dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 24/03/2006, 19h32
  2. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    Réponses: 10
    Dernier message: 12/03/2006, 22h33
  3. [Outils][C#][VoIP] Quel Sdk pour faire de la VoIP ?
    Par slyer dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 15/01/2006, 20h17

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