software - fabric python examples
¿Cómo hacer nada sin cometer ningún error? (4)
Intento escribir un script de tela que haga un git commit
; sin embargo, si no hay nada que confirmar, git sale con un estado de 1
. La secuencia de comandos de implementación lo toma como no exitoso y se cierra. Quiero detectar errores reales de compromiso, por lo que no puedo simplemente ignorar a git commit
por fallas de git commit
. ¿Cómo puedo permitir que las fallas de commit vacío se ignoren para que la implementación pueda continuar, pero aún detectar los errores causados cuando falla una confirmación real?
def commit():
local("git add -p && git commit")
Captura esta condición de antemano al verificar el código de salida de git diff?
Por ejemplo (en shell):
git add -A
git diff-index --quiet HEAD || git commit -m ''bla''
EDITAR: Se git diff
comando git diff
según el comentario de Holger.
Desde la página man de git commit
:
--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.
intenta / atrapa 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))
with settings(warn_only=True):
run(''git commit ...'')
Esto hace que el tejido ignore el error. Tiene la ventaja de no crear commits vacíos.
Puede envolverlo en una capa adicional de with hide(''warnings''):
para suprimir por completo la salida, de lo contrario, obtendrá una nota en la salida de la tela en la que falló la confirmación (pero el fabfile continúa ejecutándose).