2012-02-18 30 views
5

に私は私の.git /フック/事前コミットファイルに次のように持ってPowerShellのGitのフック終了コード

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

これが正常に同じディレクトリにpre-commit-hook.ps1ファイル内のコードを実行されますが、終了をキャプチャしていませんコード。 tldp.orgによると、exitだけが指定されている場合、最後の終了コードが返されます。終了コードが0でない場合、Gitフックは失敗しますが、powershellスクリプトがステータスコード1を返しても、常に成功します。フックが正しく機能するように、PowerShellスクリプトから終了コードを取得するにはどうすればよいですか?

+0

ような何かをする必要がある場合があります::終了(1)'返すためにゼロ以外のコードを呼び出し側に返します。これが動作すれば私はそれを私の答えにします:-) –

+0

nopeは動作しません。私はすでにスクリプトの中に 'exit 1'しか持っていませんでしたが、どちらもうまくいきませんでした。 –

+0

私はあなたの可能性があると考えました...時には[動作しません](http://stackoverflow.com/questions/8902004/powershell -fails-to-return-proper-exit-code/8902329#8902329)。 –

答えて

6

ps1スクリプトの呼び出しを単純なままにしておくと、正常に動作するはずです。私にとっては、次の作品:

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

は、PS1スクリプトはちょうどexit 1を持っていたし、実現しなかったコミット。

あなたは-commandようなものをやっている、PowerShellが正しく動作することが知られていない、あなたは `[環境]を追加するスクリプトの試みで-command {& .\test.ps1; exit $lastexitcode}

+1

うん。ここで重要なのは、 "pre-commit"自体が.git/hooksで既に実行されているにもかかわらず、現在のディレクトリがプロジェクトのルートであるということです。それは間違いなくドキュメントにはありません;) –

関連する問題