git bash msbuild nunit msysgit

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:

  1. Bash no parece encontrar MSBuild.exe ni nunit-console.exe (problema de ruta).
  2. Tanto MSBuild.exe como nunit-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