web-dev-qa-db-fra.com

noir comme crochet pré-commit échoue toujours mes commits

J'essaie d'utiliser pre-commit pour gérer black comme un hook de pré-validation Git, mais je dois le faire mal.

Black auto-enforce Python règles de style de code. Dans mon fichier de configuration de pré-validation:

-   repo: https://github.com/psf/black
    rev: 19.3b0
    hooks:
    -   id: black

Ce que j'attends, c'est que le noir modifie simplement le fichier et que la validation réussisse.

Mais lorsque je mets en scène un fichier (non conforme au noir) et que j'essaye de le valider, le noir va de l'avant et modifie le fichier pour le rendre conforme, comme prévu ... Mais le problème est qu'il renvoie un "échec". Donc, la validation échoue. Et puis je dois décompresser le fichier, puis le reformater avant de recommencer ... et ce n'est qu'alors que la validation réussit.

C'est une énorme gêne et ne peut pas être le flux de travail prévu?

Qu'est-ce que je fais mal?

6

En regardant le README de black, vous voudrez probablement utiliser le --check option, qui se termine simplement avec succès ou sans succès selon que le fichier est conforme aux normes. Cela entraînera l'échec de la validation sans modifier le fichier.

1
bk2204

Un de mes développeurs est venu avec une bonne astuce, au cas où vous auriez un échec de validation en raison du noir (par exemple en raison des guillemets simples/doubles) qui est résolu avec le crochet de pré-validation (comme avec la chaîne de guillemet double) fixateur). vous obtenez dans une sorte de "situation de git de terre nobodies". Il y a un fichier modifié dans les fichiers intermédiaires, mais ne peut pas être validé par le crochet de pré-validation, le statut de git ne verra aucun changement, mais la validation échoue (un trou vraiment noir à mon avis). Vous obtenez seulement un échec lors de la validation, mais rien ne peut être fait (sauf une tête de réinitialisation sur ce fichier). Une fois que vous êtes dans cette situation et exécutez: utilisez commit -m 'Resolving pre-commit-hook changes' --no-verify ..... tada!: c'est résolu.

0
michel.iamit

Je suis le même bateau que toi. D'après ce que j'ai recherché, les validations ne peuvent pas être modifiées par des hooks de pré-validation.

Pour autant que je sache, la meilleure chose à faire est ce que décrit le bk2204. Nous demandons au noir d'empêcher toute validation incluant des fichiers python qui n'ont pas été correctement formatés en noir. Il s'assure toujours que toutes les validations sont formatées, mais il est en effet ennuyeux qu'il ne le soit pas formatez automatiquement les fichiers pour nous.

Ca a du sens. Tout changement dans un commit doit être organisé. Si nous pouvions le faire à partir du crochet git, notre problème serait résolu. Vous êtes arrivé à mi-chemin en modifiant le fichier directement depuis le crochet git. La prochaine moitié serait de mettre en scène toutes les modifications des fichiers modifiés. Mais évidemment ... "Vous ne pouvez pas modifier un commit dans un hook de pré-commit" ce qui signifie pas de staging. https://stackoverflow.com/a/14641656/6032076

J'aurais commenté la réponse de bk2204, mais je n'ai pas encore 50 représentants.

Grattez tout cela, cette réponse ( https://stackoverflow.com/a/16832764/6032076 ) affirme que les validations peuvent être modifiées dans un hook de pré-validation. Dans ce cas, des fichiers sont ajoutés, donc je parie que dans notre cas, les fichiers peuvent être reformulés/modifiés.

0
DavidTriphon