Forum Linux.général git hooks : post-receive / git add

Posté par  (site web personnel) .
Étiquettes :
0
16
août
2012

Salut,

Je gère un schéma réseau que je versionne dans un dépôt git (schéma créé avec yEd). Je souhaiterai qu'à chaque fois que je push le schéma sur le dépôt git principal, un hook puisse générer un export en PNG de ce schéma et qu'il l'ajoute au commit en cours.

Pour l'instant, mon problème se situe au niveau du hook git. Je ne suis pas certain que ce que je cherche à faire soit possible. Le dépôt principal est un dépôt git (bare) géré par gitolite. J'ai réussi à mettre un hook pre-receive, à afficher le contenu du fichier commité (un fichier xml au final), par contre, je n'arrive pas à faire le git add pour ajouter le fichier PNG généré. L'erreur est facile à comprendre : remote: fatal: This operation must be run in a work tree. Ceci doit s'expliquer par le fait qu'il s'agisse d'un dépôt bare et non une copie de travail.

A votre avis, est-il possible d'arriver au résultat attendu, et sera-t-il obligatoire d'effectuer cette tâche côté client dans un pre-commit ?

  • # Seconde copie

    Posté par  (site web personnel) . Évalué à 2.

    Pour faire ce genre de truc sur serveur, je te conseille d'utiliser une copie du dépôt à un autre endroit. Dans ton hook, tu pourras alors faire un truc du genre :

    cd /chemin/de/la/copie
    git pull
    # créer le PNG
    
    

    En revanche, l'ajouter au commit en question, oublie, le commit est effectué de ton côté, il ne faut pas le réécrire ailleurs.

  • # Pourquoi versionner le PNG ?

    Posté par  . Évalué à 2.

    Pourquoi veut tu absolument mettre le PNG dans le commit ? Si c'est un fichier facile à générer, il ne devrai pas être dans le dépot, il faudrait juste filer le script à mettre dans le post-checkout pour régénérer l'image…

    Au pire, tu pourrai versionner son hash et git-annexer l'image au dépot, mais c'est beaucoup de complexité pour pas grand chose. Et ça ne résout pas le problème de changer un commit coté serveur.

    De plus, rajouter des commit coté serveur après un receive, c'est assez dangereux, puisqu'il faudra obliger les utilisateurs qui pushent à faire un pull juste après s'il veulent pas se retrouver avec des grosses divergences. Et il ne faudrait pas que des utilisateurs tentent de corriger ce que fait le pre-receive avec des commits à eux, parce que ça pourrai foutre un bordel monstre dans l'historique.

  • # Bien ce que je pensais :(

    Posté par  (site web personnel) . Évalué à 1.

    Merci pour vos réponse !

    Tout d'abord, pourquoi versionner le PNG. Tout simplement parce qu'on voudrait qu'il soit généré toujours de la même manière, et qu'il pourra être utilisé à plusieurs endroits (pages wiki, documentations, etc etc). Donc un utilisateur peut en avoir besoin, et on voudrait que ça soit toujours "le même".

    Pour éviter les modifications d'historique côté serveur, j'ai pensé à une autre solution, pourriez-vous me dire ce que vous en pensez :
    - mise en place d'un hook pre-commit sur chaque dépôt de travail de ce qui mettent à jours le schéma (on va être 2 ou 3 à tout casser) : ce hook génère les deux PNG (le schéma et la vignette), puis les ajoute au commit
    - mise en place d'un hook pre-receive côté serveur, pour vérifier que les deux PNG sont présents dans le commit. Si un des deux fichiers est absent, le hook refuse le push et fourni à l'utilisateur l'URL de la page wiki qui indiquera comment installer le hook local.

    Le hook de pre-commit (côté client donc) ainsi que le jar (le truc qui génère les PNG) seront versionnés eux-aussi dans un dépôt git, ce qui facilitera l'installation des hooks.

    Techniquement, je suis sur que cette solution est réalisable. Maintenant, est-ce que c'est "propre" du point de vue de la philosophie git, je ne sais pas.

    Merci encore pour vos réponses.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.