software examples example python git fabric

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).