2012-02-18 16 views
5

Tengo el siguiente en mis .git/ganchos/archivo pre-commitPowershell Git código de enlace Salir

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

Esto ejecuta con éxito el código en el archivo pre-commit-hook.ps1 en el mismo directorio, pero no captura la salida código. De acuerdo con tldp.org, se devolverá el último código de salida si solo se especifica exit. Los hooks de Git fallarán si el código de salida no es cero, pero aunque mi script de powershell devuelve un código de estado de 1, siempre tiene éxito. ¿Qué puedo hacer para capturar el código de salida del script de PowerShell para que el enlace funcione correctamente?

+0

En su intento guión añadiendo '[Entorno] :: Salir (1)' para recuperar la código distinto de cero para la persona que llama. Si esto funciona, lo haré mi respuesta :-) –

+0

no funciona. Ya tenía solo 'exit 1' en mi script pero eso tampoco funcionó –

+0

Pensé que podría ... porque a veces [no funciona] (http://stackoverflow.com/questions/8902004/powershell -fails-to-return-proper-exit-code/8902329 # 8902329). –

Respuesta

6

Mantenga la invocación de la secuencia de comandos ps1 simple y debe tenerlo funcionando. Las siguientes obras para mí:

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

El guión PS1 solo tenían una exit 1 y la confirmación no sucedió.

Cuando usted está haciendo cosas por el estilo -command, Powershell no se sabe que funciona correctamente y puede que tenga que hacer algo como -command {& .\test.ps1; exit $lastexitcode}

+1

Sí, eso funciona. Creo que la clave aquí es que a pesar de que el "compromiso previo" ya se está ejecutando en .git/hooks, el directorio actual es la raíz de su proyecto. Eso definitivamente NO está en los documentos;) –

Cuestiones relacionadas