GIT hooks dla Stash (Atlassian) – by już nigdy nie przesłać PDB w pull requests
W pracy korzystamy z dość popularnego narzędzia firmy Atlassian – Stash. Potrzebowaliśmy zablokować możliwość pushowania zmian do wszystkich repozytoriów kodu zawierającego pdb.
Niestety w Google na próźno szukać hooków typu pre-receive (można znaleźć tylko pre-commit, które działają zupełnie inaczej) które odpowiadają za przyjmowanie zmian z zewnątrz. Dlatego w wolnej chwili popełniłem takie małe „coś”:
#!/bin/bash read oldrev newrev refname git --work-tree=. diff $newrev | grep $FORBIDDEN_PATTERN > /dev/null result=$? if [ "$result" -eq "0" ] then echo "W commitujesz PDB, to nie jest dobry pomysl!" exit 1; fi |
Tworzymy plik np.: 10_ipdb, zgodnie z dokumentacją GITa ustawiamy chmod +x dla naszego HOOKa (do pliku wklejamy zawartość jak powyżej).
Niestety w STASHu nie ma możliwości tworzenia globalny HOOKów, ale to można w prosty sposób obejść dodając do wszystkich repozytoriów symlinka do 10_ipdb.
find . -type d -name "pre-receive.d" -printf "ln -s /SCIEZKA_DO_PLIKU/10_ipdb %P/ \n" |sh |
To polecenie wykonujemy w katalogu z repozytoriami STASH-a. Tworzymy symlinka także należy pamiętać by nie skasować pliku z naszym hookiem
Ekstra
Jeśli chcemy ubarwić sobie pracę, możemy po każdym pushu serwować jakiś dowcip, dodająć poniższy fragment do naszego hooka:
curl -s --connect-timeout 0 http://api.icndb.com/jokes/random\?firstName\=John\&\;lastName\=Doe | grep -Po '"joke":.*?[^\\]",' |
Pozdrawiam :)
Preview: