J'essaie d'écrire un script de structure qui fait un git commit
; cependant, s'il n'y a rien à valider, git quitte avec le statut 1
. Le script de déploiement considère que cela a échoué et se ferme. Je veux détecter réel échecs de validation, donc je ne peux pas simplement ignorer le tissu pour git commit
les échecs. Comment puis-je permettre que les échecs de validation vides soient ignorés afin que le déploiement puisse se poursuivre, tout en détectant les erreurs provoquées lorsqu'un véritable commit échoue?
def commit():
local("git add -p && git commit")
Attraper cette condition au préalable en vérifiant le code de sortie de git diff?
Par exemple (dans Shell):
git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
MODIFIER: fixe git diff
commande selon le commentaire de Holger.
Du git commit
page de manuel:
--allow-empty
Usually recording a commit that has the exact same tree as its
sole parent commit is a mistake, and the command prevents you
from making such a commit. This option bypassesthe safety, and
is primarily for use by foreign SCM interface scripts.
with settings(warn_only=True):
run('git commit ...')
Cela amène le tissu à ignorer l'échec. A l'avantage de ne pas créer de commits vides.
Vous pouvez l'encapsuler dans une couche supplémentaire de with hide('warnings'):
pour supprimer totalement la sortie, sinon vous obtiendrez une note dans la sortie du tissu que la validation a échoué (mais le fabfile continue de s'exécuter).