Estou tentando escrever um script de tecido que faz um git commit
; entretanto, se não houver nada para confirmar, o git sai com um status de 1
. O script de implantação considera isso malsucedido e fecha. Eu quero detectar falhas reais de confirmação, então não posso simplesmente ignorar o tecido para git commit
falhas. Como posso permitir que falhas de confirmação vazia sejam ignoradas para que a implantação possa continuar, mas ainda detecte erros causados quando uma confirmação real falha?
def commit():
local("git add -p && git commit")
git diff
é um comando "porcelain" que não deve ser usado para scripts. O que você provavelmente deseja égit diff-index --quiet HEAD || git commit -m 'bla'
. Veja também esta resposta .git diff --quiet --exit-code --cached
é que ele será avaliado como1
(falso) apenas para arquivos modificados que não foram testados para confirmação (arquivos não adicionados). O comentário aprovado é a melhor solução para contabilizar novos arquivos e exclusões.git diff-index --quiet HEAD || git commit -m 'bla'
deve ser uma resposta a esta pergunta.Na
git commit
página de manual:fonte
-p
, porém, mas aindawith settings(warn_only=True): run('git commit ...')
Isso faz com que o tecido ignore a falha. Tem a vantagem de não criar commits vazios.
Você pode envolvê-lo em uma camada adicional de
with hide('warnings'):
para suprimir totalmente a saída, caso contrário, você obterá uma nota na saída da malha de que o commit falhou (mas o fabfile continua a ser executado).fonte
tente / pegar 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))
fonte
except:
, useexcept Exception
ou assim.