Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:memocommit

This is an old revision of the document!


Je commite en 9 leçons ou comment faire un bon commit

Quand on essaie de faire des commits, on oublie toujours une chose ou l'autre quand on n'a pas l'habitude (pas comme Romain ou Luc qui sont des vrais pros). Voici donc une petite marche à suivre qui détaille, étape par étape, tout ce qu'il faut faire pour faire un beau commit pas foireux

Avant de commiter, il est indispensable de vérifier que les nouveaux développement sont portable (via compilation sur différentes plateformes et compilateurs) et qu'il n'y a pas de régression dans les capacités de Metafor (via l'execution de la batterie sur différentes configurations).

Le présent document présente pas à pas la procédure de menant à un commit réussi …

Attention, depuis un (des nombreux :-P ) commit de réorganisation de notre cher Luc, un troisième dossier mtStart a été créé, en plus des existants oo_meta et oo_nda. Ce dossier aussi doit être updaté, transféré sur stations, … Si quelqu'un s'ennuie un vendredi aprem, il faudrait mettre la page et les captures d'écran à jour.

00. Plateformes de test

Rappel des plateformes de tests de la batterie :

OS compiler nb core Bacon GUI Battery Nice value Fichier CMake
thorgal Linux64 gcc 2*4 oui oui oui 19 thorgal.cmake
blueberry Linux64 icc 4 oui oui oui 19 blueberry.cmake
PC Windows Win64 VS2012 - oui oui oui - win64-vs2012.cmake

0. Hypothèses de départ

  • On considère que les sources stations vont être dans /home/$USER/Metafor
  • (Optionnel) Il faut aussi savoir se connecter sur les stations sans mot de passe. Pour ce faire, suivez les instructions décrites ici.
  • Enfin, les programmes suivants (disponibles sur le ftp clifton) doivent être installés sur son PC:
    • Samcef (normalement inclus dans les libs-vs2012)
    • Matlab

1. Mise à jour complète

Bien mettre à jour les sources et compiler son projet (CMake), attention à bien updater aussi les fichiers oo_nda et mtStart: Avec TortoirseSVN, svn update des 3 dossiers de Metafor (mtStart, oo_meta, oo_nda).

Je mets à jour mes sources

:!: Avant de transférer sur les stations, taper “python chkrep.py format > out.html” dans le dossier oo_meta. Vérifier que vous n'introduisez pas de bugs supplémentaires. :!:

2. Transférer les sources sur les stations

  • Dans MetaBin\bin\Release : python battery.py clean pour nettoyer les vieilles crasses de la batteries
  • Dans oo_meta faire python clean.pyw pour nettoyer les crasses du projet. Cela n'est pas obligatoire, mais cela permet de supprimer les .pyc par exemple, pour éviter par la suite de commiter des fichiers qui ne doivent pas l'être. Attention qu'il ne faut pas aveuglément cliquer sur Go et tout supprimer, il me semble que cela supprimer parfois des fichiers requis par certains cas-tests (à vérifier…)
  • Enfin, il est également bon de faire un SVN Clean Up de oo_meta, oo_nda et mtStart, sans quoi les dossiers pourraient être trop gros pour être zippés correctement. Les options par défaut peuvent être laissées, attention de ne pas cocher “Delete unversioned files and folders”, “Delete ignored files and folders” et “Revert all changes recursively”.
  • On zippe les sources : avec WinRar, faire un fichier qui peut s'appeler, par example, oomDate.zip (attention, pas un fichier .rar) avec les trois dossiers mtStart, oo_meta et oo_nda

Je crée une archive avec WinRarJe sélectionne l'option zip

  • On transfère sur les stations avec winscp (utilisé dans la suite), ou filezilla, ou autre:
    • Se connecter à blueberry & thorgal ($USER@blueberry.ltas.ulg.ac.be)
    • Copier le fichier oomDate.zip dans /home/$USER.

Je me connecte sur les stations Je transfère mon fichier zippé

3. Faire passer la batterie sur son PC Windows

  • Dans l'invite de commandes, on se met dans le répertoire Metafor\Meta\MetaBin\bin\Release et on tape
python battery.py -j 2 (ou 3,4,etc...) -l

Je lance la batterie sur mon PC Windows

  • Vérifier avec Araxis Merge les différences dans les fichiers STP, ITE, INW, EXW et EXT de oo_meta/apps/verif/*-Windows.txt: générer un fichier html de diffs par la commande python battery.py verif puis python battery.py diff et ouvrir le fichier Windows-diff.html qui a été créé dans MetaBin\bin\Release pour examiner les différences.
    Je génère un fichier html avec les diff des fichiers STP, ITE, INW, EXW et EXT. J'examine le fichier diff obtenu.
  • Petit conseil (très utile si on ne sait pas d'où viennent les diffs): avoir deux versions de Metafor sur le PC:
    • Une version officielle à laquelle on ne touche pas et la version de développement.
    • On lance une batterie avec la version officielle et une avec la version de développement.
    • On compare les résultats de ces deux batteries et aussi avec ceux du Repository. Ca permet de détecter les diffs à prendre en compte et celles qui ne sont pas graves (si pas de diff entre offi et dev, on peut commiter)

4. Faire passer les batteries sur les stations

Pendant qu'on fait passer la batterie sur son PC, on lance la batterie sur les stations. Pour cela, il faut compiler les sources et lancer la batterie sur lesdites stations, i.e. sous Linux64-gcc (thorgal) et Linux64-icc (blueberry).

  • On se connecte sur les stations via PuTTY.

Je me connecte sur blueberry

  • On va dans /home/$USER/Metafor:
cd /home/$USER/Metafor
  • On tape la commande top pour voir si personne n'est occupé sur la machine.

Le résultat de la commande top

  • A partir du répertoire /home/$USER/Metafor/, on lance le (magnifique) script de Romain comp.py. Pour faire son choix dans le menu, il suffit de taper la lettre ou le chiffre précédant la commande en question dans le menu.Je lance comp.py
    • a. Archive name. Chemin et nom des sources zippées de Metafor. Ainsi, si on tape a, on aJ'indique où se trouvent les sources zippées.
    • b. Nombre de CPU pour la compilation et la batterie (voir tableau ci-dessous pour le nombre de CPU des différentes machines).
    • c. e-mail address. C'est clair non?
    • d. is bacon present? Bacon est présent sur toutes les machines.
    • h. build options. Donner le nom du fichier de config CMake (voir tableau ci-dessous).
    • i. debug mode. Laisser False
    • j. nice value. Priorité de calcul pour la batterie (voir tableau ci-dessous).
    • k. svn Repository. Chemin du Repository de Metafor. Il se trouve dans
      svn+ssh://clifton.ltas.ulg.ac.be/home/metafor/SVN/oo_meta/trunk
    • 1. Les sources sont zippées, présentes ou doivent être checkoutées. Ici, elles sont zippées zip. Pour indiquer au script où se trouve les sources zippées, on tape a et on rentre le chemin des sources.
    • 2. compile True ou False
    • 3. battery True, False ou continue. La troisième option permet de ne relancer que les cas tests de la batteries qui n'ont pas encore tourné ou qui ne sont pas passés.
    • 4. installer False
    • G. Lancer le script en interactif (à ne jamais faire, sauf cas très particuliers!).
    • B. Lancer le script en batch. A utiliser si on lance une batterie la nuit sinon on prend toutes les ressources des stations et en plus si on perd la connection, on perd toute une nuit pour rien!
    • S. Sauve la configuration courante.
    • Q. Quitter le script
  • Se connecter sur la station suivante (ssh blueberry ou ssh thorgal)
  • Les fichiers de résultats de la batterie sont envoyés automatiquement par email. On recevra notamment un mail avec un fichier html reprenant les diff sur la machine analogue à celui obtenu pour les résultats de la batterie sur son pc
  • Voici le tableau qui permet de choisir les paramètres pour configurer comp.py
OS compiler nb core Bacon GUI Battery Nice value Fichier CMake
thorgal Linux64 gcc 2*4 oui oui oui 19 thorgal.cmake
blueberry Linux64 icc 4 oui oui oui 19 blueberry.cmake
PC Windows Win64 VS2012 - oui oui oui - win64-vs2012.cmake
  • Si vous n'aimez pas utiliser le (magnifique) script de Romain, vous pouvez toujours faire tout ça à la main

5. Une fois que la batterie est passée...

  • Comme on utilise le (magnifique) script de Romain, on a reçu un mail avec un fichier html reprenant les diff sur les différences stations. On peut donc analyser les diffs sur les stations et sur son PC.
  • Si on a des diffs sur une des trois machines, on répète les étapes 2, 3 et 4 jusqu'à ce qu'on ait plus de diffs ou alors seulement des diffs qu'on peut expliquer sur les différentes machines…
  • On peut aussi faire les diff "à la main"
  • Si on a des diffs uniquement sur un ou deux fichiers, il est possible de relancer uniquement la battery sur ceux-ci :
    • On se place dans USER/Metafor/Meta_B/bin/apps/(dossier du cas test)
    • On supprime le .res concerné
    • On relance comp.py depuis USER/Metafor/ avec les options “Sources présentes”, “Pas de compilation” et “Continuer la batterie”.

6. Le commit proprement dit

Le moment tant attendu arrive enfin: on commite!!!

  • Dans le répertoire oo_meta, on nettoie ses crasses:
    python clean.pyw
  • Si on n'est vraiment pas sûr de soi, on peut faire un zip du Repository pour eviter les couilles (mais ce n'est pas obligatoire)… On va par exemple sur thorgal avec PuTTy et on tape:
    cd /accounts/$USER
    tar -cvzf Metafor_date.tar /accounts/metafor/SVN
  • On parcourt l'ensemble des fichiers modifiés pour écrire proprement sa page de commit
  • Dans TortoiseSVN, on clique droit successivement sur oo_meta et oo_nda, puis on va sur “Tortoise SVN” et sur “Check for modifications”. Dans la fenêtre qui s'ouvre, on coche “show unversioned files” et “show ignored files”.Je regarde mes fichiers modifiés.Je regarde mes fichiers modifiés.
    • Avec les “non-unversioned”, on rajoute ceux qu'il faut ajouter → clique droit sur les fichiers tortoise svn add sans oublier d'indiquer \$Id: \$ au début de chaque fichier. J'ajoute mes nouveaux fichiers.
    • On se met dans oo_meta/oo_nda → “SVN commit”. Prendre note des fichiers ajoutés, supprimés et déplacés avant de fermer la fenêtre svn pour faire la page de commit sur le site MetaforJe commite mes brols!
  • Sur les stations, on se connecte avec PuTTy et on tape
    • sur blueberry:
      cd /home/$USER/Metafor/oo_meta/apps/verif
      svn commit *Linux64-icc.txt

L'éditeur de texte vi vi Tutorial se lance dans l'invite de commande. Si on ne désire pas ajouter de commentaires supplémentaires dans le fichier texte ouvert, on tape

:wq

c'est-à-dire “write” et “quit”.

Ensuite, il suffit de choisir l'option “continue”, c'est-à-dire taper “c”, et d'insérer son mot de passe “svn” pour effectuer le commit.

Log message unchanged or not specified
(a)bort, (c)ontinue, (e)dit : 
c
Password:
Sending    CPU-Linux64-icc.txt
Sending    EXT-Linux64-icc.txt 
Sending    EXW-Linux64-icc.txt
Sending    INW-Linux64-icc.txt
Sending    ITE-Linux64-icc.txt
Sending    LKS-Linux64-icc.txt
Sending    MEM-Linux64-icc.txt 
Sending    STP-Linux64-icc.txt
Transmitting file data ........
Committed revision 1677.
  • sur thorgal:
    cd /home/$USER/Metafor/oo_meta/apps/verif
    svn commit *Linux64-gcc.txt

L'éditeur de texte vi vi Tutorial se lance dans l'invite de commande. Si on ne désire pas ajouter de commentaires supplémentaires dans le fichier texte ouvert, on tape

:wq

c'est-à-dire “write” et “quit”.

Ensuite, il suffit de choisir l'option “continue”, c'est-à-dire taper “c”, et d'insérer son mot de passe “svn” pour effectuer le commit.

Log message unchanged or not specified
(a)bort, (c)ontinue, (e)dit : 
c
Password:
Sending    CPU-Linux64-gcc.txt
Sending    EXT-Linux64-gcc.txt 
Sending    EXW-Linux64-gcc.txt
Sending    INW-Linux64-gcc.txt
Sending    ITE-Linux64-gcc.txt
Sending    LKS-Linux64-gcc.txt
Sending    MEM-Linux64-gcc.txt 
Sending    STP-Linux64-gcc.txt
Transmitting file data ........
Committed revision 1676.

7. Vérifications

A présent, le commit est supposé terminé, les étapes suivantes sont de la vérification.

  • Sur PC : refaire un checkout des sources, puis recompiler le projet (ou mettre à jour sa version officielle et la recompiler). Puis on lance apps.qs.cont2 pour voir si tout va bien.
  • Sur les stations, on fait un check out des sources et on recompile les sources avec comp.py:Je vérifie que tout compile encore sur les stations.
Le checkout via comp.py nécessite de pouvoir se connecter sans mot de passe. Sinon, on va juste se faire bannir, ce qui n'a pour seul intérêt que de mettre Luc de mauvais humeur… Procédure alternative

8. Informer les autres

  • Mettre le site à jour: c-à-d écrire sa page de commit sur le Wiki et mettre à jour la liste des commits
  • Envoyer 1 mail au groupe Google du service.
  • Mettre à jour l'image d'évolution du temps CPU de la batterie sur le site (obligatoire si on a ajouté des nouveaux cas-tests): dans oo_meta:
    • Si on n'a pas matplotlib:
      python stats.py -plot sum apps/verif/CPU-Linux64.txt
    • Si on a matplotlib:
      python stats.py -matplot sum apps/verif/CPU-Linux64.txt
    • Copier l'image et la mettre sur le site en remplacement de l'ancienne

9. Fêter ça

  • Amener de la tarte ou du gâteau pour fêter son commit réussi.

Youpi! J'ai fini mon commit!

commit/memocommit.1460023016.txt.gz · Last modified: 2016/04/07 11:56 by hennuyer

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki