2012-02-18 27 views
5

Ho il seguente nei miei .git/ganci/file di pre-commitPowerShell Git Codice Hook Exit

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

Questo viene eseguito correttamente il codice nel file pre-commit-hook.ps1 nella stessa directory, ma non cattura l'uscita codice. Secondo tldp.org, l'ultimo codice di uscita verrà restituito se viene specificata solo l'uscita. Gli hook Git falliranno se il codice di uscita non è zero, ma anche se il mio script PowerShell restituisce un codice di stato di 1, ha sempre successo. Cosa posso fare per acquisire il codice di uscita dallo script PowerShell in modo che l'hook funzioni correttamente?

+0

Nello script prova ad aggiungere '[ambiente] :: Exit (1)' per restituire il codice diverso da zero per il chiamante. Se funziona, farò la mia risposta :-) –

+0

no non funziona. Ho già avuto solo "exit 1" nella mia sceneggiatura ma non ha funzionato né –

+0

ho pensato che potresti ... Perché a volte non funziona [http://stackoverflow.com/questions/8902004/powershell -fails-to-ritorno-corretta-uscita-codice/8902329 # 8902329). –

risposta

6

Mantenere l'invocazione dello script ps1 semplice e si dovrebbe farlo funzionare. Le seguenti opere per me:

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

Lo script PS1 ha appena avuto un exit 1 e il commit non è accaduto.

Quando si sta facendo cose come -command, PowerShell non è noto per funzionare correttamente e potrebbe essere necessario fare qualcosa di simile -command {& .\test.ps1; exit $lastexitcode}

+1

Sì, funziona. Penso che la chiave qui sia che anche se "pre-commit" stesso è già in esecuzione in .git/hooks, la directory corrente è la radice del tuo progetto. Questo NON è sicuramente nei documenti;) –