J'essaye d'écrire un script de fabric qui fait un git commit
; cependant, s'il n'y a rien à valider, git se termine avec le statut 1
. Le script de déploiement considère cela comme un échec et se ferme. Je veux détecter les échecs réels de validation, donc je ne peux pas simplement donner à Fabric une couverture ignorer les git commit
échecs. Comment puis-je autoriser l'ignorance des échecs de validation vide afin que le déploiement puisse continuer, tout en détectant les erreurs causées par l'échec d'une validation réelle?
def commit():
local("git add -p && git commit")
git diff
s'agit d'une commande "porcelain" qui ne doit pas être utilisée pour les scripts. Ce que vous voulez probablement, c'estgit diff-index --quiet HEAD || git commit -m 'bla'
. Voir aussi cette réponse .git diff --quiet --exit-code --cached
est qu'il sera évalué à1
(false) uniquement pour les fichiers modifiés qui n'ont pas été préparés pour la validation (fichiers non ajoutés). Le commentaire voté à la hausse est la meilleure solution pour tenir compte des nouveaux fichiers et des suppressions.git diff-index --quiet HEAD || git commit -m 'bla'
devrait être une réponse à cette question.Depuis la
git commit
page de manuel:la source
-p
, cependant, mais quand mêmewith settings(warn_only=True): run('git commit ...')
Cela amène le fabric à ignorer l'échec. A l'avantage de ne pas créer de commits vides.
Vous pouvez l'envelopper dans une couche supplémentaire
with hide('warnings'):
pour supprimer totalement la sortie, sinon vous obtiendrez une note dans la sortie du fabric indiquant que la validation a échoué (mais le fabfile continue de s'exécuter).la source
essayez / attrapez bébé!
from fabric.api import local from fabric.colors import green def commit(message='updates'): try: local('git add .') local('git commit -m "' + message + '"') local('git push') print(green('Committed and pushed to git.', bold=False)) except: print(green('Done committing, likely nothing new to commit.', bold=False))
la source
except:
, utilisezexcept Exception
plutôt un autre.