Gitpuller.sh – Rafraîchisseur de dépôts git
Pour le taf, j’ai une chiée centaine de dépôts git clonés sur mon ordi et j’ai besoin de les conserver à jour parce que lorsque je pousse mes modifications, je déteste recevoir ce message :
Je me voyais mal faire un git pull
à chaque fois que je dois bosser sur un dépôt alors j’ai cherché une solution un minimum élégante. Les dépôts sont tous stockés dans le sous-dossier GIT-LAB
de ma home. J’ai commencé à écrire un bout de script.
Comme d’habitude, j’ai œuvré par itérations avant d’arriver au résultat actuel. J’avais pas prévu à l’époque d’en faire un article du coup je n’ai pas gardé l’historique pour te dire je ne l’avait même pas poussé sur git du coup je vais te raconter ma démarche.
Dans un premier temps, je remplissais simplement un tableau avec les résultats d’un find
des sous-dossiers .git
de mon dossier GIT-LAB
. Puis pour chaque résultat, je lançais un git pull
. Ça faisait le taf mais c’était moche.
Rapidement j’ai torturé le chemin de chaque dépôt pour afficher ce qui me semblait opportun (est-ce le dépôt d’un client ? d’un rôle Ansible
? Puppet
?), utilisé printf
pour écraser la ligne sur laquelle j’écrivais le git pull en cours et, ajouté un espace avec un fond coloré en vert ou rouge pour notifier si tout se passe bien.
J’ai ensuite voulu ajouter une barre de progression et j’ai trouvé le génialissime article d’Ephase Bash avancé: barre de progression que j’ai dévoré. J’ai pris le temps de comprendre et digérer ces nouvelles informations et j’ai réussi à adapter mon script pour intégrer cette fonctionnalité.
On peut torturer à loisir la sortie des commandes. C’est peut-être évident pour toi qui est un barbu mais pour moi, ok j’avais capté le fait de pipe
un résultat pour l’envoyer vers une autre commande mais l’idée de totalement annihiler la sortie d’une commande et d’en forger une toute autre ça ne m’avait même pas effleuré.
J’ai même pris le temps de créer un script modifié pour masquer les noms des sous-dossiers pour pouvoir te faire un gif.
Si ça t’intéresses, tu trouveras le dépôt ici.
Pour ne pas avoir à lancer le script à la main, je le lance juste après le chargement de ma clé privée depuis mon .bashrc
.