[PYTHON] Visualisez les relations internes avec les packages de Go sur une base engagement par engagement

call-aimation.gif
Programme utilisé: bxcodec / go-clean-arch

Aperçu

  1. Il est difficile de comprendre les programmes avec des relations compliquées entre les packages internes de Go. --Je veux visualiser ――Parce que c'est un gros problème, visualisons chaque commit et en faisons une animation

Préparation

code

Ce que j'ai fait

  1. Obtenez le journal de validation
  2. Exécutez la commande pour chaque validation
  3. Sortie des relations de package interne de Go pour doter Faril et créer un gif
  4. Créez une animation avec la même taille gif pour chaque commit

1. Obtenez le journal de validation

Vous pouvez l'obtenir avec git log --pretty = oneline. Quoi qu'il en soit avec python

res = subprocess.check_output(["git", "-C", path_dir, "log", "--pretty=oneline"])

Je veux obtenir uniquement la valeur de hachage du commit (valeur de hachage + commentaire). Je n'ai obtenu que la première valeur de hachage séparée par un blanc et en ai fait une liste.

2. Exécutez la commande pour chaque validation

J'ai réinitialisé chaque commit et exécuté la commande (y a-t-il un meilleur moyen que de réinitialiser ??).

for commit in log_list:
    subprocess.call(["git", "-C", path_dir, "reset", "--hard", commit]) |
    command(path_dir)

Utilisez le chemin du répertoire où se trouve le programme lors de l'exécution de la commande.

3. Sortie des relations de package interne de Go pour doter Faril et créer un gif

3.1. Création de fichiers de points

C'est le plus difficile. Il existe un package très utile appelé parser qui obtiendra le package que vous importez dans le fichier. Cela peut être regroupé d'un fichier à un package.

difficulté

--Par fichier-> Par package parser obtient également le nom de package du fichier, mais il est impossible de le distinguer si le même nom de package existe dans un autre répertoire. J'ai enregistré le répertoire, mais il semble y avoir un moyen plus simple --Distinguer les packages externes Je voulais cibler uniquement les packages internes (fabriqués par moi-même), comment puis-je les distinguer? ?? Je l'ai fait comme "externe s'il y a github", mais il semble que ce n'est pas une très bonne méthode.

3.2. Créer un fichier gif à partir d'un fichier dot

Utilisez graphviz. dot -T gif sample.dot -o sample.gif

4. Créez une animation avec la même taille gif pour chaque commit

4.1. Aligner les tailles gif

Lors de la réalisation d'une animation, si la taille de chaque fichier est différente, la grande taille sera coupée. mogrify -resize (width)x(height)! *.gif Choisissez une taille qui fait du bien.

4.2. Création d'animation

Utilisez ImageMagick. convert -delay 5 -loop 0 *.gif animation.gif

Site référencé

à partir de maintenant

La position d'affichage du graphique devient différente pour chaque commit, et il est difficile de voir lors de l'animation. Je veux arranger ça d'une manière ou d'une autre.

Recommended Posts

Visualisez les relations internes avec les packages de Go sur une base engagement par engagement
Enregistrez le package avec PyPI
Folium: Visualisez les données sur une carte avec Python
Visualiser grib2 sur une carte avec python (matplotlib)