Git Office Hours : le test pour Entr'ouvert
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NOTES.txt 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. ############################
  2. # Notes de développement : #
  3. ############################
  4. ++++++++++++++++++
  5. + Grandes étapes +
  6. ++++++++++++++++++
  7. 1) Recherche et choix d'une bibliothèque
  8. Dès la réception du mail, j'ai pris le temps de rechercher une bibliothèque
  9. permettant d'interagir avec un dépot git.
  10. La première bibliothèque que j'ai trouvé ( GitPython ) m'a convenu pour
  11. plusieurs raisons :
  12. - elle est packagée par Debian (disponible sous le nom python3-git)
  13. - les tests ont été concluants :
  14. - possibilité de récupérer la liste de tous les commit d'un dépot (quelque
  15. soit la branche)
  16. - possibilité de récupérer la liste de tous les commit d'un dépot distant
  17. après un fetch (sans avoir à cloner le dépot)
  18. 2) Réflexion sur la définition des "horaires de travail"
  19. Une définition simple a été retenue (pour s'en tenir au sujet) :
  20. - Une heure de début et une heure de fin pour les jours travaillés
  21. - Une liste de jours non travaillés (le week-end)
  22. Le choix a été fait de ne pas tenir compte du fuseau horaire récupéré :
  23. considérer que la journée de travail commence à la même heure quelque soit
  24. le fuseau horaire semble être la meilleur méthode pour prévenir les
  25. situations de burn-out.
  26. Ce choix implique que les heures de début et de fin devraient être définies
  27. sans fuseau horaire.
  28. 3) Choix d'une méthode pour utiliser la bibliothèque
  29. J'ai passé un certain temps à réfléchir à la méthode qui me conviendrait le
  30. mieux pour récupérer les commits d'un dépot.
  31. L'objectif étant de récupérer un iterateur sur des commits pour permettre un
  32. traitement en flux et éviter de stocker l'ensemble des donnée de l'ensemble
  33. des commits d'un dépot.
  34. Rapidement il s'est avéré qu'il faudrait sûrement créer un dépot temporaire
  35. avec comme idée de faire :
  36. - git init
  37. - git add remote URL
  38. - git fetch
  39. - itérer sur les commit
  40. - supprimer le dépot temporaire
  41. Même si l'idée d'écrire une classe dédiée ne me plaisait pas à priori, c'est
  42. la méthode la plus sûre que j'ai trouvé pour :
  43. - garantir la suppression du dépot temporaire
  44. - garantir la non suppression du dépot temporaire tant qu'une référence à un
  45. commit existe (la récupération de certaines informations des commits est
  46. faite a l'appel de la méthode : si le dépot n'existe plus on ne peut pas
  47. récupérer l'info)
  48. C'est pour cette raison que l'utilisation de contextlib.contextmanager a été
  49. abandonnée (on pourrait garder une référence sur un commit en dehors du bloc
  50. 'with')
  51. 4) Premiers tests unitaires
  52. Une première série de test a été écrite pour valider/tester :
  53. - les méthodes de récupération des commits
  54. - la fonction qui vérifie si un moment est "hors horaire" ou non
  55. 5) Réflexions sur l'UI et les fonctionnalités
  56. Le choix a été fait d'une CLI et d'utiliser argparse pour gérer les
  57. arguments.
  58. Les premiers arguments ajoutés ont été ceux permettant de définir les
  59. horaires de travail : horaire de début/fin de journée, liste des jours de
  60. weekend.
  61. Deux sorties ont été envisagées :
  62. - une sortie "CLI" lisible dans un terminal
  63. - une sortie CSV pour permettre d'envoyer le résultat à un autre programme
  64. pour des traitements supplémentaires
  65. Rapidement, une fonctionnalité m'a semblé essentielle pour rendre le script
  66. utile : indiquer une période que l'on veut analyser (ajout des
  67. arguments --from DATEHEURE --to DATEHEURE ).
  68. Ne prévoyant pas d'implémenter de cache, le programme ne sera pas pratique à
  69. lancer plusieurs fois de suite. Il m'a donc semblé important de proposer des
  70. méthodes d'aggrégations permettant d'observer plus précisément le nombre de
  71. commit "hors horaire".
  72. Le script bénéficie donc d'une option --group 'week' ou --group 'month' qui
  73. permet de produire le ratio des commits hors horaire pour les périodes
  74. indiquées (en plus du total).
  75. 6) Implémentation de la sortie
  76. Une fonction d'aggrégation (par utilisateur et, optionnellement par une des
  77. deux périodes de temps proposées) a été écrite.
  78. Les deux fonctions de sorties : CLI ou CSV ont aussi été écrites. L'argument
  79. permettant de choisir d'écrire un fichier CSV a été ajouté (--csv-output FILE).
  80. La décision a été prise d'ajouter une seconde ligne par utilisateur au tableau
  81. affiché en "sortie CLI", une ligne affichant le nombre total de commit :
  82. 10% de 10 commit ne représente pas la même surcharge que 10% de 300 commit.
  83. 7) Packaging
  84. J'ai pris la décision de mettre en place un packaging minimal pour le script :
  85. Un setup.py sur lequel s'appuyer pour construire un paquet debian.
  86. +++++++++++++++
  87. + Temps passé +
  88. +++++++++++++++
  89. La durée totale serait compliquée à évaluer, mais malgrès une semaine
  90. chargée, j'ai pu y consacrer différents moments tout au long de la semaine.
  91. +++++++++++++++++++++++++++
  92. + Difficultés rencontrées +
  93. +++++++++++++++++++++++++++
  94. - Essayer d'avoir un résultat aussi simple que lisible tout en étant aussi
  95. complet et utilisable que possible
  96. - Se limiter dans les fonctionnalités pour le rendre plus pratique
  97. - Le packaging
  98. - Une semaine chargée