Próbuję napisać skrypt tkaniny, który robi git commit
; jednak jeśli nie ma nic do zatwierdzenia, git kończy pracę ze statusem 1
. Skrypt wdrażania traktuje to jako niepowodzenie i kończy pracę. Chcę wykrywać rzeczywiste niepowodzenia w zatwierdzaniu, więc nie mogę po prostu dać tkaninie koca ignorowania git commit
błędów. Jak mogę pozwolić na ignorowanie błędów zatwierdzania pustego, aby wdrażanie mogło być kontynuowane, ale nadal przechwytywało błędy spowodowane niepowodzeniem prawdziwego zatwierdzenia?
def commit():
local("git add -p && git commit")
git diff
jest to polecenie „porcelain”, którego nie należy używać do tworzenia skryptów. To, czego najprawdopodobniej chcesz, togit diff-index --quiet HEAD || git commit -m 'bla'
. Zobacz także tę odpowiedź .git diff --quiet --exit-code --cached
sprawę dokładniej, problem polega na tym, że ocena zostanie oceniona na1
(false) tylko dla zmodyfikowanych plików, które nie zostały przygotowane do zatwierdzenia (pliki niedodane). Głosowany w górę komentarz jest najlepszym rozwiązaniem do uwzględnienia nowych plików i usunięć.git diff-index --quiet HEAD || git commit -m 'bla'
powinien być odpowiedzią na to pytanie.Ze strony podręcznika
git commit
:źródło
-p
choć, ale nadalwith settings(warn_only=True): run('git commit ...')
Powoduje to, że tkanina ignoruje awarię. Ma tę zaletę, że nie tworzy pustych zatwierdzeń.
Możesz owinąć go dodatkową warstwą,
with hide('warnings'):
aby całkowicie stłumić wyjście, w przeciwnym razie otrzymasz informację w wyjściu tkaniny, że zatwierdzenie nie powiodło się (ale fabfile nadal jest wykonywany).źródło
spróbuj / złap dziecko!
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))
źródło
except:
,except Exception
zamiast tego używaj lub czegoś podobnego.