Estoy tratando de escribir un script de tela que haga a git commit
; sin embargo, si no hay nada que confirmar, git sale con un estado de 1
. La secuencia de comandos de implementación considera que no se ha realizado correctamente y se cierra. Quiero detectar fallas reales de confirmación, por lo que no puedo simplemente ignorar las git commit
fallas de la tela . ¿Cómo puedo permitir que se ignoren las fallas de confirmación vacía para que la implementación pueda continuar, pero aún así detectar los errores causados cuando falla una confirmación real?
def commit():
local("git add -p && git commit")
git diff
es un comando "porcelana" que no debe utilizarse para la creación de scripts. Lo que probablemente quieras esgit diff-index --quiet HEAD || git commit -m 'bla'
. Vea también esta respuesta .git diff --quiet --exit-code --cached
es que se evaluará como1
(falso) solo para los archivos modificados que no se han preparado para su confirmación (archivos no agregados). El comentario con voto positivo es la mejor solución para contabilizar nuevos archivos y eliminaciones.git diff-index --quiet HEAD || git commit -m 'bla'
debería ser una respuesta a esta pregunta.Desde la
git commit
página del manual:fuente
-p
embargo, se perdió el , pero aún asíwith settings(warn_only=True): run('git commit ...')
Esto hace que la tela ignore la falla. Tiene la ventaja de no crear confirmaciones vacías.
Puede envolverlo en una capa adicional de
with hide('warnings'):
para suprimir totalmente la salida; de lo contrario, obtendrá una nota en la salida de la tela que indica que la confirmación falló (pero el fabfile continúa ejecutándose).fuente
¡Intenta atrapar al bebé!
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))
fuente
except:
, useexcept Exception
o algo así.