2012-02-18 16 views
5

Mam następujących w moim .git/haki/pre-commit plikPowerShell Git Kod Hook Wyjście

#!/bin/sh 
exec c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command " Get-Location | % { '$_\pre-commit-hook.ps1'} | % { & $_ }" 
exit 

ten z powodzeniem wykonuje kod w pliku w tym samym katalogu pre-commit-hook.ps1, ale nie uchwycić wyjście kod. Zgodnie z tldp.org ostatni kod wyjścia zostanie zwrócony, jeśli określono tylko wyjście. Git hooks zawiedzie, jeśli kod wyjścia jest niezerowy, ale mimo tego, że mój skrypt powershell zwraca kod stanu równy 1, zawsze się to uda. Co mogę zrobić, aby przechwycić kod wyjścia ze skryptu powłoki, aby hak działał poprawnie?

+0

w twojej try skrypt dodając '[środowiska] :: Wyjście (1)' do zwrotu niezerowy kod do dzwoniącego. Jeśli to działa, zrobię to moja odpowiedź :-) –

+0

nope nie działa. Miałem już tylko 'exit 1' w moim skrypcie, ale to nie zadziałało ani –

+0

Pomyślałem, że możesz ... Ponieważ czasami to [nie działa] (http://stackoverflow.com/questions/8902004/powershell -fails-to-return-proper-exit-code/8902329 # 8902329). –

Odpowiedz

6

Zachowaj proste wywołanie skryptu ps1 i powinieneś go uruchomić. Następujące roboty dla mnie:

#!/bin/sh 
echo 
exec powershell.exe -ExecutionPolicy RemoteSigned -File '.\.git\hooks\pre-commit-hook.ps1' 
exit 

PS1 skrypt po prostu miał exit 1 i zobowiązują się nie stało.

Kiedy robisz rzeczy jak -command, PowerShell nie jest znana do poprawnego działania i może trzeba zrobić coś takiego -command {& .\test.ps1; exit $lastexitcode}

+1

Tak działa. Myślę, że kluczem jest to, że nawet jeśli "pre-commit" jest już uruchomiony w .git/hooks, bieżący katalog jest katalogiem głównym twojego projektu. To zdecydowanie NIE jest w dokumentach;) –