Automatice git bisect para comandos de lote MSBuild/NUnit/.NET/Windows en msysgit?
bash (1)
Me gustaría automatizar git bisect
(instrucciones también disponibles en la documentación oficial de Linux Kernel Git para git bisect
) para construir un proyecto .NET con MSBuild , y ejecutar pruebas unitarias para ello con nunit-console.exe
. Sin embargo, estas herramientas se crearon para su uso en un entorno de desarrollo de Windows, y tengo varios problemas para hacer que funcionen en el entorno Bash de msysgit, resumidas de la siguiente manera:
- Bash no parece encontrar
MSBuild.exe
ninunit-console.exe
(problema de ruta). - Tanto
MSBuild.exe
comonunit-console.exe
usan indicadores de opción de línea de comando de estilo de Windows, es decir, comienzan con una barra inclinada, por ejemplo,MSBuild.exe /M
En Bash, las barras diagonales causan errores, porque una barra diagonal es lo que los sistemas Unix / Linux / * nix usan para representar rutas de directorio.
Este es el comando git bisect
que he estado usando:
$ git bisect start <bad commit> <good commit>
$ git bisect run auto-build-run-tests.sh
y estos son los contenidos de auto-build-run-tests.sh
:
#!/bin/sh
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_02.html
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
# Build solution.
echo "Building..."
MSBuild.exe /
/consoleloggerparameters:ErrorsOnly /
/maxcpucount /
/nologo /
/property:Configuration=Debug /
/verbosity:quiet /
"Epic-Project-of-Supreme-Awesome.sln"
# Check exit status.
# (status != 0) ?
status=$?
if [ $status -ne 0 ]
then
echo "Build failure, status $status."
exit $status
fi
echo "Build success."
# Run unit tests
nunit-console.exe /
/noresult /
/stoponerror /
"bin/Debug/ArtificialIntelligence.Tests.dll" /
"bin/Debug/TravelingSalesManSolver.Tests.dll"
status=$?
if [ $status -ne 0 ]
then
echo "Test failure, status $status."
exit $status
fi
echo "Tests passed."
Para resolver el problema de ruta, simplemente utilicé una ruta absoluta en el script. Para resolver el problema de la opción de línea de comando forward-slash de Windows, escapé de la barra inclinada con otra barra inclinada (obtuve ese consejo de otra respuesta de , la enlazaré cuando la encuentre nuevamente).
Así que ahora el script de trabajo se ve así:
#!/bin/sh
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_02.html
# http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
# Build solution.
echo "Building..."
c:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe /
//consoleloggerparameters:ErrorsOnly /
//maxcpucount /
//nologo /
//property:Configuration=Debug /
//verbosity:quiet /
Epic-Project-of-Supreme-Awesome.sln
# Check exit status.
# (status != 0) ?
status=$?
if [ $status -ne 0 ]
then
echo "Build failure, status $status."
exit $status
fi
echo "Build success."
# Run unit tests
nunit-console.exe /
//noresult /
//stoponerror /
bin/Debug/ArtificialIntelligence.Tests.dll /
bin/Debug/TravelingSalesManSolver.Tests.dll
status=$?
if [ $status -ne 0 ]
then
echo "Test failure, status $status."
exit $status
fi
echo "Tests passed."
y una vez más, lo ejecutas así:
$ git bisect start <bad commit> <good commit>
$ git bisect run auto-build-run-tests.sh