Rake bug on Windows

Discussion in 'Ruby' started by S. Robert James, Mar 22, 2007.

  1. I can't find out where to file this:

    Rake returns 0 exit status on Windows, even after failure.

    >rake -V

    c:0:Warning: require_gem is obsolete. Use gem instead.
    rake, version 0.7.2

    >ruby -v

    ruby 1.8.5 (2006-08-25) [i386-mswin32]

    >true && echo "Success!"

    "Success!"

    >false && echo "Success!"


    >rake notthere && echo "Success!"

    c:0:Warning: require_gem is obsolete. Use gem instead.
    (in C:/medwiz/delanor/development)
    rake aborted!
    Don't know how to build task 'notthere'

    (See full trace by running task with --trace)
    "Success!"
     
    S. Robert James, Mar 22, 2007
    #1
    1. Advertising

  2. S. Robert James

    Phrogz Guest

    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)
     
    Phrogz, Mar 22, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Joe Van Dyk
    Replies:
    2
    Views:
    118
    Damphyr
    Jan 31, 2006
  2. peppermonkey
    Replies:
    1
    Views:
    268
    Gregory Brown
    Feb 10, 2007
  3. Adam Anderson
    Replies:
    1
    Views:
    147
    Adam Anderson
    Sep 19, 2007
  4. James Mead
    Replies:
    0
    Views:
    159
    James Mead
    Jan 15, 2008
  5. thufir
    Replies:
    3
    Views:
    234
    Thufir
    Apr 12, 2008
Loading...

Share This Page