From: Phrogz Date: 2007-03-23T07:50:05+09:00 Subject: Re: Rake bug on Windows On Mar 22, 3:38 pm, "S. Robert James" wrote: > Rake returns 0 exit status on Windows, even after failure. Not really. It appears that the problem is with the rake.bat batch file that is used on Windows. Pared down, it looks something like this: "%~d0%~p0ruby" -x "%~f0" %* goto endofruby #!/bin/ruby require 'rubygems' require 'rake' load 'rake' __END__ :endofruby The problem is that the batch file doesn't seem to properly pass along the exit code in a way that causes Windows to do the right thing if you perform a goto in the batch file. Here's a simple test case: C:\>type tmp1.bat @echo off ruby -e "puts 'failing...'; exit(1)" C:\>tmp1.bat && echo "success" failing... C:\>type tmp2.bat @echo off ruby -e "puts 'failing...'; exit(1)" goto alldone :alldone echo The error level is %ERRORLEVEL% C:\>tmp2.bat && echo "success" failing... The error level is 1 "success" I hoped maybe I could fix this by really truly having the batch file return the right error code, but no such luck: C:\>exit /? Quits the CMD.EXE program (command interpreter) or the current batch script. EXIT [/B] [exitCode] /B specifies to exit the current batch script instead of CMD.EXE. If executed from outside a batch script, it will quit CMD.EXE exitCode specifies a numeric number. if /B is specified, sets ERRORLEVEL that number. If quitting CMD.EXE, sets the process exit code with that number. C:\>type tmp3.bat @echo off ruby -e "puts 'failing...'; exit(1)" goto alldone :alldone echo The error level is %ERRORLEVEL% EXIT /B %ERRORLEVEL% C:\>tmp3.bat && echo "success" failing... The error level is 1 "success" If this is important, you could modify the rake.bat file on Windows (in c:\ruby\bin) to have it not use the trick ruby -x option, and instead just use -e instead. Something like: C:\>type \ruby\bin\rake.bat @"%~d0%~p0ruby" -e "require 'rubygems'; require 'rake'; load 'rake'" %* C:\>rake && echo "success" rake aborted! No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb) c:/ruby/lib/ruby/gems/1.8/gems/rake-0.7.2/lib/rake.rb:1849:in `load_rakefile' (See full trace by running task with --trace)